可以提高异常吗?

时间:2015-08-04 10:23:16

标签: python

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

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

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

1 个答案:

答案 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字符串的参数。