Estoy trabajando en algún código de socket Python que esté usando la función socket.fromfd()
.Determinar si una función está disponible en un módulo de Python
Sin embargo, este método no está disponible en todas las plataformas, por lo que estoy escribiendo algún código alternativo en el caso de que el método no esté definido.
¿Cuál es la mejor manera de determinar si un método se define en tiempo de ejecución? ¿Es suficiente lo siguiente o hay una mejor expresión idiomática?
if 'fromfd' in dir(socket):
sock = socket.fromfd(...)
else:
sock = socket.socket(...)
estoy un poco preocupado de que la documentación de dir()
parece desalentar su uso. getattr()
sería una mejor opción, como en:
if getattr(socket, 'fromfd', None) is not None:
sock = socket.fromfd(...)
else:
sock = socket.socket(...)
Pensamientos?
EDITAR Como Paolo señalado, esta pregunta es nearly a duplicate de una pregunta acerca de cómo determinar la presencia de atributos. Sin embargo, dado que la terminología utilizada es disjunta (lk's "el objeto tiene un atributo" frente a mi "el módulo tiene una función") puede ser útil conservar esta pregunta para buscarla, a menos que ambas puedan combinarse.
no veo cómo esta respuesta merece un downvote ...:/ –
preferiría hasattr sobre getattr sólo por el bien de la lectura! – bobince
"hasattr no debe usarse porque se traga excepciones como KeyboardInterrupt". (c) http://doc.bazaar.canonical.com/developers/code-style.html#hasattr-and-getattr, por lo que 'getattr' es un buen material para hacer. –