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

时间:2018-10-17 19:45:34

标签: python exception-handling boolean

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

但是由于Python在“真实性”方面的灵活性,我想不出您可能会传递给bool()函数的任何可能引起异常的值。即使您根本不带任何参数调用它,该函数也会完成并返回False

我是否纠正bool()不会引发异常,只要您传递不超过一个参数即可?结果,将呼叫括在try-except中没有意义吗?

1 个答案:

答案 0 :(得分:12)

bool抱怨__bool__不返回TrueFalse

>>> class BoolFail:
...     def __bool__(self):
...         return 'bogus'
... 
>>> bool(BoolFail())
[...]
TypeError: __bool__ should return bool, returned str

但是,没有内置的类型是这种疯狂的。

DSM发表了非常有价值的评论:流行的库提供了一些示例,其中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)