Spesso finisco con i file di codice che possono essere importati o eseguiti come __main__
. È facile gestirlo controllando se __name__ == '__main__'
. Ma a volte, se la mia funzione principale diventa troppo grande, ne divido alcune parti in altre funzioni, aspettandomi che vengano chiamate solo quando __name__ == '__main__'
. A volte applico questa condizione chiamando la seguente funzione assert_main
:
def assert_main():
"Use this in a module you only expect to get run as __main__, not imported"
mod = sys._getframe(1).f_globals["__name__"]
if "__main__" != mod:
raise Exception("Module {} is not main".format(mod))
Altre opzioni includono la creazione di assert_main
in un decoratore o la definizione delle funzioni in questione all'interno del blocco if __name__ == '__main__'
. E potrebbero esserci altre opzioni a cui non ho pensato. Qual è la cosa da fare in modo idiomatico?