调用类payload方法传参时报TypeError提示存在意外关键字参数year_start
问题排查与解决步骤
- 第一步:验证导入的
TrendsUtility类来源是否正确
绝大多数这类报错都是因为你修改的源码文件,和你实际导入的类所属文件不是同一个。你可能改的是本地开发目录下的google_trends_utility.py,但实际导入的是Python site-packages目录下已经安装的旧版本google_trends_package包,旧版本的payload方法还没有加year_start等参数。
可以加一行代码验证类的来源:
打印出来的路径如果不是你正在修改的源码文件路径,就是导入来源错误。import inspect print(inspect.getfile(TrendsUtility)) - 第二步:检查
payload方法参数拼写
核对你写的payload方法定义里的参数名,有没有手滑拼写错误,比如把year_start写成year_strat、yearstart这类和调用时不匹配的名称。 - 第三步:检查类内是否存在重复的
payload方法定义
Python不支持方法重载,如果你的TrendsUtility类里写了多个同名的payload方法,只有最后一个定义会生效,可能前面带参数的定义被后面旧的无参定义覆盖了。 - 第四步:清除Python模块缓存重试
Python导入模块后会生成__pycache__目录缓存字节码,如果你修改完代码没有清除缓存,运行时还是会调用旧版本的代码。直接删除源码目录下的所有__pycache__目录,再重新运行测试代码即可。 - 第五步:验证方法实际参数签名
可以直接打印方法的参数列表确认实际生效的参数:
输出的args字段里如果没有import inspect print(inspect.getfullargspec(gTrends.payload))year_start等参数,就说明当前运行的方法确实没有你定义的这些参数,回到前面的步骤排查即可。
对应解决方案
- 如果是导入来源错误:卸载已经安装的旧版本包
pip uninstall google_trends_package,再在本地开发目录下用开发模式安装:pip install -e .,之后修改源码会实时生效不需要重新安装。 - 如果是参数拼写错误/方法被覆盖:修正对应代码即可。
- 如果是缓存问题:删除缓存后重启运行环境即可。
内容的提问来源于stack exchange,提问作者Ivan Raykov
相关产品推荐
相关产品推荐

