运行weatherterm触发TypeError: object() takes no parameters报错求助
嘿,我来帮你分析下这个错误。你运行python -m weatherterm -a USNY1192:1:US -p WeatherComParser -td时触发的TypeError: object() takes no parameters,核心问题出在实例化WeatherComParser类的环节(对应代码里的parser = cls()这一行)。下面是几个最可能的原因和对应的修复方案:
1. WeatherComParser的__init__方法写得有问题
如果是你自己实现的这个解析器类,大概率是在定义构造方法时踩了坑:
- 要么是调用父类构造方法时多传了参数(比如继承自
object却给super().__init__()传了值,而object的初始化方法根本不需要参数); - 要么是类的
__init__定义了必填参数,但命令行调用时没有传入(不过这里代码是cls()无参实例化,所以这种情况概率稍低)。
举个错误示例:
class WeatherComParser(object): def __init__(self): super().__init__("多余参数") # 这里会直接触发你遇到的错误
修复方式:打开WeatherComParser的定义文件,检查__init__方法,确保调用父类构造时没有多余参数,并且类本身支持无参实例化(符合WeatherTerm对解析器的要求)。
2. 解析器类继承关系错误
WeatherTerm的解析器应该继承自它提供的基类(比如BaseParser),如果WeatherComParser错误地直接继承了object,而基类原本有初始化逻辑,就会导致实例化失败。
修复方式:确认类的继承链正确,比如:
from weatherterm.parsers import BaseParser class WeatherComParser(BaseParser): # 实现parse等必要方法 pass
3. Python3.6的兼容性问题
你用的是Python3.6.3,有些较新的WeatherTerm版本可能对这个老版本Python的类实例化逻辑兼容不好,比如元类、__init_subclass__这些特性在3.6里的行为和新版本有差异。
修复方式:要么找一个兼容Python3.6的WeatherTerm版本安装,要么手动修改WeatherComParser的代码,适配3.6的语法和特性。
快速排查小技巧
你可以先在Python交互环境里直接测试实例化这个类,快速定位问题:
from weatherterm.parsers.weather_com_parser import WeatherComParser parser = WeatherComParser() # 如果这里报错,说明问题就在类本身
内容的提问来源于stack exchange,提问作者S. Reza

