我有一个功能
def foo(bar):
#do some things
len(bar)
如果我打电话
foo(42)
它抛出
的例外TypeError:类型' int'的对象没有len()
如何检查输入的值是否可以与len()一起使用?
答案 0 :(得分:13)
你可以这样做:
if hasattr(bar, '__len__'):
pass
或者,您可以捕获TypeError。
答案 1 :(得分:8)
您可以测试对象是否为Sized
:
import collections
if isinstance(bar, collections.Sized):
如果isinstance()
的所有抽象方法都已实现,则Sized
测试为真;在这种情况下只是__len__
。
就个人而言,我只是抓住了例外:
try:
foo(42)
except TypeError:
pass # oops, no length
答案 2 :(得分:5)
您可以使用try
和except
来获得最佳效果:
def foo(bar):
#do some things
try:
print(len(bar))
except TypeError:
print('Input not compatible with len()')
答案 3 :(得分:2)
从len()
calls __len__()
magic method开始,您可以检查某个对象是否在hasattr()
的帮助下定义了__len__
方法:
>>> def has_len(obj):
... return hasattr(obj, '__len__')
...
>>> has_len([1,2,3])
True
>>> has_len('test')
True
>>> has_len(1)
False