Python提示 TypeError: super(type, obj): obj must be an instance or subtype of type问题
在工作中有一天将debug下正常工作的python代码编译之后运行却抛出异常,提示“TypeError: super(type, obj): obj must be an instance or subtype of type”,引起这个问题的原因是因为type和obj类型不一致造成的(即obj对象不是由type类型的类创建的),但是debug下是工作的啊,突然想到会不会是由于编译后使用了pyd模块,模块加载时出现了问题。
为了找到错误的原因,构建了测试代码复线了错误过程,重复导入模块,对于pyd模块在使用api load_module时必须使用该模块的名称导入,否则会导入失败,但是有时必须要修改名称,因为在不同的目录下或许会有相同名称但功能不同的模块,如果不修改名称后面导入的模块会覆盖之前导入的模块,见图1.1 测试代码。
现在的问题是修改了名称,但是现在发现可能还是存在覆盖导入的问题,在第二次导入后会使第一次成功创建的对象在方法内调用super()时抛出“TypeError: super(type, obj): obj must be an instance or subtype of type”异常,见图1.1 测试代码。
图
1.1 测试代码
1. 可能是因为在导入“a”后触发的(因为名称一样都是a)reload操作修改了a模块对象,由于存在引用(可能有部分不可见的数据结构),同时也影响了‘a1’模块对象内部的部分数据?从而导致奇怪的异常。
2. 能是因为在导入“a”后触发的(因为名称一样都是a)reload操作修改了a模块对象导致pyhton 解释器在解释的时候将a和a1模块都一律按照reload后的模块来解释。
简单验证上面的说法,在项目的根目录下新建名为a、b的文件夹,分别放置a.pyd模块,模块内的测试代码见图2.1,这段程序执行到16行的时候错误,错误提示当前对象的类型与类的类型不一致(说明当前对象不是这个类的实例),当然这个错误是出现在重复导入a模块之后,在这之前调用get方法并没有出现异常,见图2.2。
图
2.1 a.pyd模块源文件
图
2.2 测试代码1
下面这个测试是分别通过a1_module.B类创建b_obj对象,re_a_module.B类创建re_b_obj对象,通过内部打印id,显示它们的id是一致的,都是76028552,即为re_a_module.B类的id,表明python解释器在内部解释时,将之前第一次导入的类也解释成后面重载的类,导致了实例化调用super时抛出TypeError。综上所述,假设2成立,见图2.3。
图
2.3 测试代码2
经过分析,我认为只要不引起模块的reload就能够避免该问题,故在第一次导入模块后从系统模块字典中pop出‘a’模块,导出的模块以‘a1’为键更新到sys.modules中,就能够解决上述问题。例:sys.modules.update({'a1': sys.modules.pop('a')});见图3.1。
图
3.1 模拟案例解决方案
Python提示 TypeError: super(type, obj): obj must be an instance or subtype of type问题简述问题在工作中有一天将debug下正常工作的python代码编译之后运行却抛出异常,提示“TypeError: super(type, obj): obj must be an instance or subtype of ty...
今天在Spyder里用BeautifulSoup的时候跑代码报这个
TypeError
。
遇到这个
问题
之后在网上搜了一下也不知道怎么解决,结果在Spyder里重启I
python
内核之后,就没有报错能顺利跑代码了。也不知道啥原理,重启解决一切
问题
吧...
%matplotlib inline
# Mention the file path to the dataset
path = "E:\\BCICIV_2b\\gdf_format\\"
filename = "B0302T"
raw = mne.io.read_raw_gdf(path+filename+".gdf")
出现
问题
出现下面
问题
TypeError
Traceback (most recent call last)
7 filename = "B0302T"
----> 9
print str + int 的时候就会这样了
python
+ 作为连接符的时候,不会自动给你把int转换成str
补充知识:
TypeError
: cannot concatenate ‘str’ and ‘list’
obj
ects和
Python
读取和保存图片
运行程序时报错,然后我将list转化为str就好了。
利用”.join(list)
如果需要用逗号隔开,如1,2,3,4则使用’,’.join(list)
Python
中plt可以显示和保存图片,不能使用mping
Python
出现错误
TypeError
: ‘None
Type
’
obj
ect is not iterable解决办法
TypeError
: ‘None
Type
’
obj
ect is not iterable 这个错误
提示
一般发生在将None赋给多个值时。
def myprocess():
a == b
if a != b:
return True, value;
flag, val = myprocess()
在判断语句中,当if条件不满足,并且没有else语句时,函数默认返回None。
在没有return语句时,
Python
也默认会返回None
调用时,将Non
这个错误
提示
意思是:
TypeError
(类型错误):'value'必须是字符串实例或字节实例,而不能是浮点数。
这个错误通常发生在代码中需要使用字符串或字节实例的地方,但是程序传入了一个浮点数,导致类型不匹配。例如,可能是在使用字符串格式化函数时,传入了一个浮点数而不是字符串。要解决这个错误,需要将程序中传入的变量类型改为字符串或字节实例。 <br>### 回答2:
这个
TypeError
的错误信息意味着程序的一段代码尝试将一个浮点数类型的值赋给了字符串或字节类型的变量,造成了类型错误。
在
Python
中,字符串和字节类型变量是不可变的。因此,当程序将一个浮点数类型的值赋给这些变量时,就会触发
TypeError
错误。根据错误信息,我们可以推断出出错发生在字符串或字节类型变量赋值的代码行。
为了解决这个
TypeError
错误,我们需要检查程序中涉及到字符串或字节类型变量赋值的代码,确认是否存在将浮点数类型的值赋给这些变量的情况。如果确认存在这类
问题
,我们需要将代码中的值转换成相应的字符串或字节类型,以避免
TypeError
类型错误的发生。
在
Python
中,可以使用内置的str()函数来将其他数据类型的值转换成字符串类型。如果需要将浮点数类型的值转换成字节类型,可以使用bytes()函数。例如,如果要将浮点数类型的值7.6转换成字符串类型,可以使用以下代码:
value = 7.6
string_value = str(value)
如果要将浮点数类型的值7.6转换成字节类型,可以使用以下代码:
value = 7.6
byte_value = bytes([value])
通过这种方法进行类型转换,就可以避免程序出现
TypeError
类型错误的情况。 <br>### 回答3:
这个错误信息是
Python
中的一个常见错误,原因是程序在期望string类型或byte类型的数据时,却传递了一个float类型的数据。
TypeError
通常发生在
Python
数据类型变量或函数返回值的类型不与使用者期望的类型一致的情况下。
TypeError
错误的解决方法包括如下几个方面:
1.检查所提供的参数是否与函数或者方法的描述一致;
2.检查所提供的变量是否为正确的类型;
3.查看函数或方法的源代码,看看是否将参数指定为了错误的数据类型;
4.检查代码中的语法错误或逻辑错误,例如变量名是否有拼写错误、是否应该使用列表而不是元组等等。
举个例子:如果出现上述错误是因为程序需要一个字符串(string)输入,而输入了一个浮点数(float),那么将输入的浮点数强制转换成字符串即可。可以使用
Python
内置的str()函数,来将浮点数转换成字符串。例如:
my_float = 3.14
my_string = str(my_float)
在进行编程时,了解
Python
内置函数的用法和数据类型之间的转换关系,可以避免出现常见的错误类型。在程序出现
TypeError
错误时,可以按照以上几个方面,进行一一排查,找出并解决错误。
Python提示 TypeError: super(type, obj): obj must be an instance or subtype of type问题
_ConneR_:
Python提示 TypeError: super(type, obj): obj must be an instance or subtype of type问题
ljjdreamer:
Python 类型注解中泛型应用
地球OL旅行商人:
Python提示 TypeError: super(type, obj): obj must be an instance or subtype of type问题
zihangyile:
Python提示 TypeError: super(type, obj): obj must be an instance or subtype of type问题