如果参数无法转换为适当的数值类型,则像int()
或float()
这样的函数可能会引发异常(ValueError
(。 因此,如果有可能将无效参数传递给它们,通常最好将它们括在try-except
中。
但是,由于Python在"真实性"方面的灵活性,我想不出任何可能传递给bool()
函数的可能值,从而引发异常。 即使您在没有参数的情况下调用它,该函数也会完成并返回False
。
我是否正确,只要您传递不超过一个参数,bool()
就不会引发异常? 因此,将呼叫包含在try-except
中是没有意义的?
当__bool__
不返回True
或False
时,bool
抱怨。
>>> 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)
。