[第五类错误-已解决-并总结其它四类错误]TypeError: __init__() takes 1 positional argument but 3 were given

问题描述

在学习python搭建逻辑回归简单案例时,出现了pytorch中和类的构建或实例化有关的报错-TypeError: init() takes 1 positional argument but 3 were given
然后上网查找问题原因与解决方法,通过一篇博主的文章看到了以下四种导致同标题一样报错的错误类型:该博主文章链接:https://blog.csdn.net/weixin_52527544/article/details/126961910
1.神经网络或者class类定义错误,或者没有实例化。

2.类的定义中或者初始化中__init__打成了__int__。

3.__init__少传了参数。(文章中没有细说,估计情况是实例化的时候,传入的实参和初始化时的虚参数量不一致)

4.在数据加载或下载的代码(train_dataset = dsets.MNIST(root=‘./data’, train=True, transform=transforms.ToTensor(), download=True))中,转换张量ToTensor后面忘记加括号了。详细解释看该博主的文章,链接就是上面那个。

原因分析

我对照了这四个错误类型,均不是我报错的原因,但是给了我思路,大概率是我自己敲代码不仔细导致的,所以我重新检查代码。
1)首先,看报错的位置
报错位置在实例化那里,那行代码为:
model = LogisticRegression(input_size, num_classes)
完整报错为:
Traceback (most recent call last):
File “/home/wr506/Desktop/Yaoyutong/lianxi-ceshi/pt04_logistic regression.py”, line 41, in
model = LogisticRegression(input_size, num_classes)
TypeError: init() takes 1 positional argument but 3 were given

一目了然,报错位置的代码没有错误。因此我只好使用断点运行代码排查错误,按理错误应该是在实例化代码前面,因此我给了四个断点,分别在四个位置的后面:数据集下载,数据集加载与分批,类的初始化,实例化。

2)得到出现问题的位置
通过断点运行,发现类的构建及初始化这块没有运行结果。
随即认真看这段代码,认真看时容易发现pycharm中将某一类型的字体颜色区分于其它代码,其中包括__init__为红色字体,而def init(self, input_size, num_classes):中的__init__方法没有标红,综上,我找到了自己的错误原因。

3)修改
将_init_改为__init__

至此,解决。

猜你喜欢

转载自blog.csdn.net/Timeloser_tong/article/details/133377486