Python str可以引发异常吗?
Python str可以引发异常吗?,python,Python,str是否有可能引发不可调用的参数的异常?除了由于某种原因可以覆盖\uuuu repr\uuu的自定义类之外 我在函数的enter上有一些参数,如果它不是str,我就把它转换成它。我很好奇是否我必须处理异常,如果我必须,哪些异常?处理异常不是很好的做法,但似乎这是唯一的方法 编辑: 所谓不可调用,是指参数不是在str内部执行的,比如str(get\u something\u to\u convert())。在这个例子中,我应该处理内部函数中的异常。任何类都可以基于任何原因重写\uuuuuuuuu
str
是否有可能引发不可调用的参数的异常?除了由于某种原因可以覆盖\uuuu repr\uuu
的自定义类之外
我在函数的enter上有一些参数,如果它不是str
,我就把它转换成它。我很好奇是否我必须处理异常,如果我必须,哪些异常?处理异常
不是很好的做法,但似乎这是唯一的方法
编辑:
所谓不可调用,是指参数不是在str内部执行的,比如
str(get\u something\u to\u convert())
。在这个例子中,我应该处理内部函数中的异常。任何类都可以基于任何原因重写\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,因为调用\uuuuuuuuuu。这本身就足够有理由准备获得例外
但对于非英语用户来说,一个常见的陷阱是使用Python2.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)
>>a=u'\xe9\xe8'
>>>打印
éè
>>>str(a)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
str(a)
UnicodeEncodeError:“ascii”编解码器无法对位置0-1中的字符进行编码:
序号不在范围内(128)
因此,当您对包含非ASCII字符的简单Unicode字符串调用str
时,该字符串将引发异常
该函数只接受可以通过str
直接转换为字符串的参数,这取决于您是希望处理异常还是文档 get\u something\u to\u convert()
是您真正的函数吗?或者,get\u something\u to\u convert
是一个变量,它可以是函数,也可以是其他变量?我不清楚你的问题,即使是对于可调用的参数,如果你没有真正调用它们,那么你从str(something)
得到错误的唯一方法就是如果something.\uu str\uuuu()
(或。\uuu repr\uuuu()
)引发一个异常,这将是。。。有点不寻常。@jornsharpe但这是可能的str
不会做任何特殊的事情来吞下它们。@PeterWood不,这是真的;它不会悄悄地抑制任何已经发生的错误。@AnandSKumar这是唯一一个我不调用传递的参数的例子,我将其转换为原样。哦,好的,编码是可能发生的问题之一,我认为它将是唯一的一个。我也无法想象另一个例子,允许用户传递任何对象作为参数,但我认为我将很好地记录它并处理编码错误:)感谢一个lot默认情况下,我相信\uuuuuuu str\uuuu
委托给\uu repr\uuu
。该规则的主要例外是字符串类型,在Python2.x中是浮动的。例如,str([])==repr([])
,但str(“”)=报告(“”)
。