Python/Su primer programa en Python/Prueba de módulos

Índice de la sección
«Su primer programa en Python»



Los módulos de Python son objetos y tienen varios atributos útiles. Puede usar este hecho para probar sus módulos de forma sencilla a medida que los escribe. Aquí tiene un ejemplo que usa el truco de if __name__.

if __name__ == "__main__":

Algunas observaciones antes de que empiece lo bueno. Primero, no se necesitan paréntesis que encierren la expresión de if. Segundo, la sentencia if termina con dos puntos, y va seguida por código sangrado.

Nota: Al igual que C, Python utiliza == para la comparación y = para la asignación. Al contrario que C, Python no permite la asignación embebida, de manera que no existe la posibilidad de asignar un valor accidentalmente donde deseaba hacer una comparación.

De manera que... ¿por qué es un truco esta sentencia if en particular? Los módulos son objetos y todos los módulos tienen un atributo llamado __name__. El valor del __name__ de un módulo depende de cómo esté usándolo. Si importa el módulo, entonces __name__ es el nombre del fichero del módulo, sin el directorio de la ruta ni la extensión del fichero. Pero también puede ejecutar el módulo directamente como si fuera un programa, en cuyo caso __name__ tendrá un valor especial predefinido, __main__.

>>> import odbchelper
>>> odbchelper.__name__
'odbchelper'

Sabiendo esto, puede diseñar una batería de pruebas para su módulo dentro del propio módulo situándola dentro de esta sentencia if. Cuando ejecuta el módulo directamente, __name__ es __main__, de manera que se ejecutan las pruebas. Cuando importa el módulo, __name__ es otra cosa, de manera que se ignoran las pruebas. Esto hace más sencillo desarrollar y depurar nuevos módulos antes de integrarlos en un programa mayor.

Sugerencia: En MacPython, hay que dar un paso adicional para hacer que funcione el truco if __name__. Muestre el menú de opciones pulsando el triángulo negro en la esquina superior derecha de la ventana, y asegúrese de que está marcado Run as __main__.

Lecturas complementarias sobre importar módulos