Python inspect.getmembers不会返回所有成员吗?

时间:2018-08-13 18:41:36

标签: python torch

这是inspect.getmembers中的错误,还是预期的行为?

torch.bmm in inspect.getmembers(torch)
False

1 个答案:

答案 0 :(得分:1)

这不是错误; inspect.getmembers正是在做它所记录的事情:

  

返回按名称排序的(名称,值)对列表中对象的所有成员……

因此,def test(): cdef: int i = 10 int* ref = &i print(ref[0]) # Prints 10 ref[0] = 5 print(i) # Prints 5 可能在这样的列表中,但('bmm', torch.bmm)不在。


如果您想知道torch.bmm是否是torch.bmm的成员...那么,您已经知道是,否则torch会提出一个torch.bmm。但是您可以搜索每对的第二个(值)部分:

AttributeError

...或者您可以将列表变成字典并进行搜索:

any(member == torch.bmm for name, member in inspect.getmembers(torch))

但是,torch.bmm in dict(inspect.getmembers(torch)).values() 并未引发异常这一事实已经足以告诉您该异常的存在。如果您想处理不这样做的可能性,那么在获得该异常之后进行的任何检查都为时已晚;您只想处理异常:

torch.bmm