我正在探索一个API,并使用以下内容查看可用的方法,而不用dir()
通过眼睛搜索所有属性:
methods = [m for m in dir(kt) if callable(getattr(kt, m))]
引发异常:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/soco/core.py", line 103, in inner_function
raise SoCoSlaveException(message)
soco.exceptions.SoCoSlaveException: The method or property "cross_fade" can only be called/used on the coordinator in a group
好的,所以我不能使用cross_fade
,这很好。但我没有试着打电话给我,我只是想弄清楚我是否可以。
我原以为callable()
可以使用与type()
类似的内容进行检查,但似乎它正在尝试拨打电话并且只捕获某些类型的例外。
我在尝试type(kt.cross_fade)
时遇到同样的异常,当我在终端尝试>>> kt.cross_fade
时。
所以我猜这里有两个问题:callable
试图打电话吗?并且,什么可以导致方法“存在”但完全不可用?
答案 0 :(得分:3)
callable
没有尝试调用该对象。它只检查对象是否具有调用操作符的实现。
尝试首先检索属性时发生异常。可以重写属性访问以在Python中执行任何操作,并且此对象的cross_fade
属性实现为property
,在getter上具有only_on_master
装饰器,如果您引发异常尝试检索奴隶上的属性。
答案 1 :(得分:1)