我想知道转换为字符串,即str(sth)
是否会引发一个异常,比如float(sth)
?
try:
x = str(value)
except ValueError:
x = None
确保执行不会因为转换失败而停止.
这在Python2和Python3中是否也有所不同,因为str
类在它们中是不同的??
我想知道转换为字符串,即str(sth)
是否会引发一个异常,比如float(sth)
?
try:
x = str(value)
except ValueError:
x = None
确保执行不会因为转换失败而停止.
这在Python2和Python3中是否也有所不同,因为str
类在它们中是不同的??
如果遇到在__str__
中显式引发异常的自定义类(如果未定义__str__
,则为__repr__
).或者,例如,从__str__
返回bytes
对象的类:
class Foo:
def __str__(self):
return b''
str(Foo()) # TypeError: __str__ returned non-string (type bytes)
但就我个人而言,我已经看到了这一点,我很确定没有人看到;那样做是愚蠢的.同样,在执行__str__
或边缘 case 时犯下的愚蠢错误可能会导致另一个Exception
.看看如何将Python推广到这些边缘 case 是很有趣的(请看这里的@user2357112个答案).
除此之外,在这种情况下,没有内置程序通常会引发异常,因为它在Py2
和Py3
中为所有内置程序定义.
对于用户定义的类,如果未在Python3中定义,str
将默认使用object.__str__
,而在Python2中,如果类是新样式类(继承自object
),则使用object.__str__
.
如果一个类是一个旧式的类I believe,那么classobj.__str__
用于类,instance.__str__
用于实例.
一般来说,我不会明白这一点,特殊情况对这一点来说还不够特殊.