Je travaille sur un code de socket Python qui utilise la fonction socket.fromfd()
.Détermine si une fonction est disponible dans un module Python
Cependant, cette méthode n'est pas disponible sur toutes les plates-formes, donc j'écris un code de secours dans le cas où la méthode n'est pas définie.
Quelle est la meilleure façon de déterminer si une méthode est définie lors de l'exécution? Est-ce suffisant ou existe-t-il un meilleur idiome?
if 'fromfd' in dir(socket):
sock = socket.fromfd(...)
else:
sock = socket.socket(...)
Je suis un peu inquiet que la documentation pour dir()
semble décourager son utilisation. Serait getattr()
être un meilleur choix, comme dans:
if getattr(socket, 'fromfd', None) is not None:
sock = socket.fromfd(...)
else:
sock = socket.socket(...)
pensées?
EDIT Comme Paolo a souligné, cette question est nearly a duplicate d'une question sur la détermination de la présence d'attributs. Cependant, puisque la terminologie utilisée est disjointe (l'objet de lk "lk" a un attribut " vs mon module " a une fonction ") il peut être utile de conserver cette question pour la recherche à moins que les deux puissent être combinés.
Je ne vois pas comment cette réponse mérite une downvote ...:/ –
Je préfère hasattr sur getattr juste pour l'amour de lisibilité! – bobince
"hasattr ne doit pas être utilisé car il avale des exceptions, y compris KeyboardInterrupt." (c) http://doc.bazaar.canonical.com/developers/code-style.html#hasattr-and-getattr, donc 'getattr' est une bonne chose à faire. –