str 可以引发异常吗?

Daw*_*ski 3 python

是否有str可能引发不可调用参数的异常?除了可能__repr__出于某种原因覆盖的自定义类之外?

我对函数的输入有一些争论,如果不是,str我将其转换为它。我很好奇我是否必须处理异常,如果必须,哪些是?处理Exception不是好的做法,但似乎这是唯一的方法。

编辑:不可调用我的意思是参数不在 str 内执行,例如str(get_something_to_convert()). 在这个例子中,我应该处理内部函数中的异常。

Ser*_*sta 5

任何类都可以__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)
Run Code Online (Sandbox Code Playgroud)

因此,当您调用一个包含非 ASCII 字符的简单 Unicode 字符串时str,它会抛出异常。

您是更喜欢处理异常,还是记录该函数只接受可以直接转换为字符串的参数,这取决于您str