J'explore une API, et en utilisant ce qui suit pour voir quelles méthodes sont disponibles sans chercher à travers tous les attributs de l'œil avec dir()
:Est-ce que callable (obj) tente d'appeler?
methods = [m for m in dir(kt) if callable(getattr(kt, m))]
qui jette une exception:
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
Ok, donc Je ne peux pas utiliser cross_fade
, c'est bien. Mais je n'ai pas essayé de l'appeler, j'essayais juste de savoir si je pouvais.
J'aurais pensé que callable()
serait en mesure de vérifier en utilisant quelque chose de similaire à type()
, mais il semble qu'il essaie de faire un appel et seulement attraper certains types d'exceptions.
Je reçois la même exception quand j'ai essayé type(kt.cross_fade)
, et quand je viens d'essayer >>> kt.cross_fade
dans le terminal.
Donc je suppose qu'il y a deux questions ici: Est-ce que callable
tente d'appeler? Et, qu'est-ce qui peut faire qu'une méthode "existe" mais soit complètement indisponible?