首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python ()函数可以为无效参数引发异常吗?

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

Stack Overflow用户
提问于 2018-10-17 19:45:33
回答 1查看 2.3K关注 0票数 12

如果参数不能转换为适当的数值类型,像int()float()这样的函数就有可能引发异常(ValueError)。因此,如果有可能将无效的参数传递给try-except,那么通常将这些参数包含在其中是很好的做法。

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

我是否正确,只要您只传递一个参数,bool()就不会引发异常吗?因此,将调用封装在try-except中是没有意义的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 19:47:38

bool__bool__不返回TrueFalse时会发出抱怨。

代码语言:javascript
复制
>>> class BoolFail:
...     def __bool__(self):
...         return 'bogus'
... 
>>> bool(BoolFail())
[...]
TypeError: __bool__ should return bool, returned str

不过,没有什么内置类型是如此疯狂的。

DSM给出了一个非常有价值的评论:流行的numpy库有一些bool会产生错误的例子。

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> import weakref
>>> class Foo:
...     pass
... 
>>> bool(weakref.proxy(Foo()))
[...]
ReferenceError: weakly-referenced object no longer exists

这并不是bool所独有的,任何使用其死参数的函数都可能抛出此错误,例如myfunc = lambda x: print(x)

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52862526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档