相关文章推荐
沉稳的杨桃  ·  iOS Swift ...·  1 年前    · 
想旅行的双杠  ·  SQL server agent ...·  2 年前    · 
class ListConverter(BaseConverter):
    def __init__(self, url_map, separator="+"):
        super(ListConverter, self).__init__(url_map)
        self.separator = urllib.parse.unquote(separator)
    def to_python(self, value):
        return value.split(self.separator)
    def to_url(self, values):
        return self.separator.join(super(ListConverter, self).to_url(value)
                                   for value in values)

倒没什么问题,是可以正常运行的。

然而我对 super() 的用法不是很满意,毕竟在 Python3 环境下开发,super(ListConverter, self) 有硬编码嫌疑。于是代码修改如下:

class ListConverter(BaseConverter):
    def __init__(self, url_map, separator="+"):
        super().__init__(url_map)
        self.separator = urllib.parse.unquote(separator)
    def to_python(self, value):
        return value.split(self.separator)
    def to_url(self, values):
        return self.separator.join(super().to_url(value)
                                   for value in values)

结果一运行,解释器报错如下:
TypeError: super(type, obj): obj must be an instance or subtype of type

经过多次尝试,发现问题出现在 self.separator.join(super().to_url(value) for value in values) 这段代码里。于是我做了个测试。

class A(object):
    def print_what(self, what):
        print(what)
class B(A):
    def print_what(self, what):
        [super() for __ in range(5)]
if __name__ == "__main__":
    b = B()
    b.print_what("hello")
------------------------------------
TypeError: super(type, obj): obj must be an instance or subtype of type

果然异常,当我将 super() 改为 super(B, self) 又一切正常。

是因为 super() 在一个成员函数中多次调用造成的吗?那就不用列表解析式,换寻常的循环语句:

class B(A):
    def print_what(self, what):
        for __ in range(5):
            super()

结果运行正常。

事实上,在成员函数中使用 super() 时,Python 会自动传参,我猜测是解析式影响了传进去的参数。但遗憾的是,我不知道该如何调试,才能获得错误情况下,传进去的参数是什么。

针对此次遇到的问题,解决方法有以下三种。

使用 super(ListConverter, self) 代替 super()

不用解析式,用寻常的 for 循环。

class ListConverter(BaseConverter):
    ...
    def to_url(self, values):
        tmplist = []
        for value in values:
            tmplist.append(super().to_url(value))
        return self.separator.join(tmplist)

使用解析式,但不在解析式中调用 super()。

class ListConverter(BaseConverter):
    ...
    def to_url(self, values):
        sup = super()
        return self.separator.join(sup.to_url(value)
                                   for value in values)
                    问题今天学习《Python Web 开发实战》自定义转换器这一小节,书中有段代码如下:class ListConverter(BaseConverter):    def __init__(self, url_map, separator="+"):        super(ListConverter, self).__init__(url_map)        self.sepa...
				
本文实例讲述了Python解析json时提示“string indices must be integers”问题解决方法。分享给大家供大家参考,具体如下: import json,但是出现了一个奇怪的问题: string indices must be integers 这个错误告诉我,[ ]里面应该是数字而不是字符串,但是dict使用key访问也可以,这种错误感觉解析出来的结果像是一个list。 所以考虑是字符串解析的问题。打印解析的结果,是一长串的字符串,一堆的key挤在一起,value都缺失了。再打印原始的字符串,发现了一些细节,key并没有被双引号包围,类似于’{a:abcde,
Python提示 TypeError: super(type, obj): obj must be an instance or subtype of type问题
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里重启Ipython内核之后,就没有报错能顺利跑代码了。也不知道啥原理,重启解决一切问题吧... type(np.float64(0).item()) # type(np.uint32(0).item()) # # examples using np.asscalar(a) type(np.a
在调整loss计算的时候遇到了TypeError: only integer tensors of a single element can be converted to an index这个问题,原来的计算公式为: self.loss_D = (self.loss_D_fake + self.loss_D_real) * 0.5 调整后的公式为: # train.lcf[train.lcfCountD]为修正系数 self.loss_D = (self.loss_D_fake + self.loss_D_real) * 0.5 * train.lcf[train.lcfCountD]
今天把最近一直在开发的小程序放安卓手机上测试一下,结果某个页面就一直报错: Uncaught TypeError: Converting circular structure to JSON 先说一下基本的环境: 系统:Android 6.0.1 手机:小米4 微信版本:6.6.6 小程序基于mpvue开发 在看到这个错误的时候,明白导致的原因应该是因为一个对象里面有循环引用,然后这个对象不幸的被JSON.stringify给调用了 可是这个有循环引用的对象在哪就不清楚了。 一开始想的是vue对象的data,因为小程序里面,jscore会把这个data stringify之后发送给webvie
这个错误提示意思是: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错误时,可以按照以上几个方面,进行一一排查,找出并解决错误。