我有一个看起来像这样的python函数:
def f(x):
[...]
g(x)
有时,由于我无法控制的原因x
属于<bound method A.b of <A: a>>
类型。 g()
位于第三方库中,无法处理此参数并引发异常。因此,在调用g()
之前我想要做的是测试这种情况并做其他事情:
def f(x):
[...]
if x == A.b:
doSometingElse()
else:
g(x)
现在,==
似乎不起作用,因为它永远不会成真。如果我的变量x
包含方法A.b
?
答案 0 :(得分:2)
当在对象上访问时,类中的函数将转换为绑定方法,或者在类上访问时,将转换为未绑定方法。在Python 2中,两种类型都有一个引用该函数的 func 属性。所以你的测试看起来像:
if x.__func__ is A.b.__func__:
在Python 3中,它更容易一些:
if x.__func__ is A.b:
答案 1 :(得分:-1)
也许尝试尝试除了
之外的尝试ignoreErrors: false
这将是处理它的最简单方法。