我正在尝试使用以下代码行引发错误消息:
def raise_error(value):
error = "The value " + str(value) + " does not satisfy the given conditions."
# Other stuff
该值基本上是从JSON API获得的用户输入,因此我正在尝试考虑所有可能性。如果使用str()
方法不能将给定的值转换为字符串,上述方法本身会在我的系统中引起异常吗?如果是,那么将产生异常的值是什么?
答案 0 :(得分:2)
str
方法将始终产生输出,只是可能没有意义。如docs here中所述,根据定义,它调用__str__
或__repr__
。对于所有基本类型(例如int,float,bool等),您将获得不错的输出。对于自定义类,尽管您可能会得到一些垃圾,例如:
class test:
pass
print(str(test()))
>>> <__main__.test object at 0x107f2ba20>
现在,如果您定义一个__str__
方法,您将得到类似的东西
class test:
def __str__(self):
return "A test object"
print(str(test()))
>>> 'A test object'
答案 1 :(得分:2)
简短的回答:您不必担心。该字符串是由__str__
或__repr__
函数生成的,并且其中一个或两个都将自动在所有新对象和基元上创建。
但是从技术上讲,在某些情况下,开发人员可以做一些愚蠢的事情。
方案A) __str__
函数不返回字符串:
class Test():
def __str__(value):
return
raise_error(Test())
这会导致错误
TypeError: __str__ returned non-string (type NoneType)
情形B) __str__
函数的参数数量错误:
class Test():
def __str__():
return 0
raise_error(Test())
这会导致错误
TypeError: __str__() takes 0 positional arguments but 1 was given
很显然,在所有这三种情况下,故障都在于开发人员创建了错误的__str__
函数。我认为我们都可以同意这些不是您的代码必须处理的情况。