JDM*_*JDM 7 python boolean exception-handling
有可能为类似功能int()或float()引发异常(ValueError)如果参数不能被转换为适当的数字类型.因此,try-except如果有可能将无效的参数传递给它们,通常将这些包含在a中是一种好的做法.
但是,当涉及到"真实性"时,Python的灵活性,我无法想到你可能传递给bool()会引发异常的函数的任何可能的值.即使你完全没有参数调用它,该函数也会完成并返回False.
我是否正确,bool()只要你传递的不超过一个参数,就不会引发异常?结果,将呼叫包含在一个try-except?中是没有意义的?
tim*_*geb 12
bool抱怨什么__bool__时候不回来True或False.
>>> class BoolFail:
... def __bool__(self):
... return 'bogus'
...
>>> bool(BoolFail())
[...]
TypeError: __bool__ should return bool, returned str
Run Code Online (Sandbox Code Playgroud)
但是,没有内置类型这种疯狂.
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()
Run Code Online (Sandbox Code Playgroud)
user2357112指出了以下角落案例.
标准的,近乎通用的stdlib示例,对于这样的事情:对死对象的weakref.proxy将引发几乎所有操作的ReferenceError,包括
bool.
>>> import weakref
>>> class Foo:
... pass
...
>>> bool(weakref.proxy(Foo()))
[...]
ReferenceError: weakly-referenced object no longer exists
Run Code Online (Sandbox Code Playgroud)
这不是唯一的,例如bool,任何使用其死参数的函数都可能抛出此错误myfunc = lambda x: print(x).