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 для таких вещей: слабыйref.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)
.