如何检查len是否有效

时间:2014-05-09 14:49:52

标签: python

我有一个功能

def foo(bar):
    #do some things
    len(bar)

如果我打电话

foo(42)

它抛出

的例外
  

TypeError:类型' int'的对象没有len()

如何检查输入的值是否可以与len()一起使用?

4 个答案:

答案 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)

您可以使用tryexcept来获得最佳效果:

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