如果参数不能转换为适当的数字类型,则int()
或float()
之类的函数可能会引发异常(ValueError
)。因此,通常最好将它们包含在try-except
中,如果有可能将无效的参数传递给它们。
但是由于Python在“真实性”方面的灵活性,我想不出您可能会传递给bool()
函数的任何可能引起异常的值。即使您根本不带任何参数调用它,该函数也会完成并返回False
。
我是否纠正bool()
不会引发异常,只要您传递不超过一个参数即可?结果,将呼叫括在try-except
中没有意义吗?
答案 0 :(得分:12)
bool
抱怨__bool__
不返回True
或False
。
>>> class BoolFail:
... def __bool__(self):
... return 'bogus'
...
>>> bool(BoolFail())
[...]
TypeError: __bool__ should return bool, returned str
但是,没有内置的类型是这种疯狂的。
DSM发表了非常有价值的评论:流行的numpy库提供了一些示例,其中bool
会产生错误。
>>> import numpy as np
>>> a = np.array([[1],[2]])
>>> bool(a)
[...]
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
user2357112指出了以下一些极端情况。
类似以下情况的标准,几乎通用的stdlib示例:对死对象的weakref.proxy将对几乎所有操作(包括
bool
)引发ReferenceError。
>>> import weakref
>>> class Foo:
... pass
...
>>> bool(weakref.proxy(Foo()))
[...]
ReferenceError: weakly-referenced object no longer exists
这不是bool
所独有的,使用其Dead参数的任何函数都可能引发此错误,例如myfunc = lambda x: print(x)
。