如果参数不能转换为适当的数值类型,像int()或float()这样的函数就有可能引发异常(ValueError)。因此,如果有可能将无效的参数传递给try-except,那么通常将这些参数包含在其中是很好的做法。
但是,使用Python在“真实性”方面的灵活性,我想不出您可能传递给bool()函数的任何可能值,这会引发异常。即使您不带任何参数调用它,函数也会完成并返回False。
我是否正确,只要您只传递一个参数,bool()就不会引发异常吗?因此,将调用封装在try-except中是没有意义的
发布于 2018-10-17 19:47:38
bool在__bool__不返回True或False时会发出抱怨。
>>> 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所独有的,任何使用其死参数的函数都可能抛出此错误,例如myfunc = lambda x: print(x)。
https://stackoverflow.com/questions/52862526
复制相似问题