Check for [] operator
如何检查对象是否支持python中的[]操作?我想到了以下几点:
1 2 | if supports(obj, ?[]?): print("Supports") |
你的"检查适当的支持。"你只是使用它。
1 2 3 4 | try: a = obj[whatever] except TypeError: # whatever your fall-back plan is when obj doesn't support [] (__getitem__) |
写作是你自己的事
写作你自己的
最后,我认为这将是与异常处理代码是不可读的错误。。。。。。。"。。。。。。。在许多经验丰富的Python的原理,用Python程序员接受的是,它的更容易问到让这对forgiveness许可。
语言设计了一种带到这样的异常。
1 2 | if hasattr(obj,"__getitem__"): print("Supports") |
从
1 2 3 4 5 6 | operator.getitem?? Type: builtin_function_or_method Base Class: <type 'builtin_function_or_method'> String Form: <built-in function getitem> Namespace: Interactive getitem(a, b) -- Same as a[b]. |
退房的操作模块。
Return the value of a at index b:
1
2 operator.getitem(a, b)
operator.__getitem__(a, b)Return the slice of a from index b to index c-1:
1
2 operator.getslice(a, b, c)
operator.__getslice__(a, b, c)Set the value of a at index b to c:
1
2 operator.setitem(a, b, c)
operator.__setitem__(a, b, c)Set the slice of a from index b to index c-1 to the sequence v.
1
2 operator.setslice(a, b, c, v)
operator.__setslice__(a, b, c, v)Remove the value of a at index b:
1
2 operator.delitem(a, b)
operator.__delitem__(a, b)Delete the slice of a from index b to index c-1:
1
2 operator.delslice(a, b, c)
operator.__delslice__(a, b, c)
等。
在内部算子是一
1 2 | if hasattr(obj, '__getitem__'): print"Supports" |
有一个简单的方式,如果你能看到以上的对象(例如,一iterate的
1 2 3 | import collections if isinstance(obj, collections.Iterable): print 'obj supports iteration' |
如果你需要什么,如果你可以使用一个电流检测的重点,"我所要求的只是建议而不是forgiveness"的权限:
1 2 3 4 5 6 | try: value = obj[key] except (AttributeError, TypeError, IndexError): # These are different things that can return in different situations value = None print 'I guess that key doesn\'t work' |
唯一的原因,我会用这个方法suggest
你可以检查看如果有一类的每