[英]Can the Python bool() function raise an exception for an invalid argument?
如果参数无法转换为适当的数字类型,则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将引发几乎所有操作的ReferenceError,包括
bool
。
>>> import weakref
>>> class Foo:
... pass
...
>>> bool(weakref.proxy(Foo()))
[...]
ReferenceError: weakly-referenced object no longer exists
这不是bool
独有的,任何使用其dead参数的函数都可能抛出此错误,例如myfunc = lambda x: print(x)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.