簡體   English   中英

Python bool()函數可以為無效參數引發異常嗎?

[英]Can the Python bool() function raise an exception for an invalid argument?

如果參數無法轉換為適當的數字類型,則int()float()等函數可能會引發異常( ValueError )。 因此,通常很好的做法是將它們包含在try-except有可能將無效的參數傳遞給它們。

但是,當涉及到“真實性”時,Python的靈活性,我想不出你可能傳遞給bool()函數的任何可能的值,這會引發異常。 即使你完全沒有參數調用它,該函數也會完成並返回False

我是否正確bool()只是不會引發異常,只要你傳遞它不超過一個參數? 結果,在try-except封閉電話是沒有意義的嗎?

__bool__沒有返回TrueFalse時, bool抱怨。

>>> 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將引發幾乎所有操作的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM