Python bool() 函数可以为无效参数引发异常吗?



如果参数无法转换为适当的数值类型,则像int()float()这样的函数可能会引发异常(ValueError(。 因此,如果有可能将无效参数传递给它们,通常最好将它们括在try-except中。

但是,由于Python在"真实性"方面的灵活性,我想不出任何可能传递给bool()函数的可能值,从而引发异常。 即使您在没有参数的情况下调用它,该函数也会完成并返回False

我是否正确,只要您传递不超过一个参数,bool()就不会引发异常? 因此,将呼叫包含在try-except中是没有意义的?

__bool__不返回TrueFalse时,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)

相关内容

最新更新