str
是否有可能为不可调用参数引发异常?除了出于某种原因可以覆盖__repr__
的自定义类之外?
我对函数的输入有一些论据,如果它不是str
我将它转换为它。我很好奇我是否必须处理异常,如果必须的话,我应该处理哪些异常?处理Exception
并不是一种好的做法,但似乎这是唯一的方法。
编辑:
不可调用我的意思是参数不在str内执行,如str(get_something_to_convert())
。在这个例子中,我应该处理内部函数中的异常。
答案 0 :(得分:4)
任何类都可以出于任何原因覆盖__str__
,因为str
会调用__str__
,而不是__repr__
,如果两者都已定义的话。恕我直言,就其本身而言,有足够的理由准备获得例外。
但非英语用户的常见缺陷是使用Python 2.x的Unicode字符串。只需看看以下代码:
>>> a = u'\xe9\xe8'
>>> print a
éè
>>> str(a)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
str(a)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:
ordinal not in range(128)
因此,当您在其上调用str
时,包含非ASCII字符的简单Unicode字符串将引发异常。
您是否更愿意处理异常,或者记录该函数只接受可以直接转换为str
字符串的参数。