我有一个功能
def foo(bar):
#do some things
len(bar)
Run Code Online (Sandbox Code Playgroud)
如果我打电话
foo(42)
Run Code Online (Sandbox Code Playgroud)
它抛出一个例外
TypeError:'int'类型的对象没有len()
如何检查输入的值是否可以与len()一起使用?
Nat*_*ath 20
你可以做:
if hasattr(bar, '__len__'):
pass
Run Code Online (Sandbox Code Playgroud)
或者,您可以捕获TypeError.
您可以测试对象是否Sized:
import collections
if isinstance(bar, collections.Sized):
Run Code Online (Sandbox Code Playgroud)
该isinstance()如果所有的抽象方法的测试是真实的Sized实现; 在这种情况下,这只是__len__.
就个人而言,我只是抓住异常:
try:
foo(42)
except TypeError:
pass # oops, no length
Run Code Online (Sandbox Code Playgroud)
您可以使用try并except获得最佳效果:
def foo(bar):
#do some things
try:
print(len(bar))
except TypeError:
print('Input not compatible with len()')
Run Code Online (Sandbox Code Playgroud)