Как отмечено в комментариях, это объясняет, почему проверка происходит в то время, когда она есть, но все равно не делает то, что вы хотите. Эта проверка только проверяет, является ли модуль, содержащий disallow_main
, __main__
или нет;нет, если код вызова __main__
. Вам понадобится более сложная проверка, чтобы сделать именно то, что вам нужно.
Вам нужно обернуть переданную функцию в функцию-обертку, которая выполняет проверку. Вы выполняете проверку при запуске декоратора, которая отделена от того, когда вызывается функция.
def disallow_main(func):
def wrapper(*args):
if __name__ == '__main__':
raise RuntimeError("Cannot run from main.")
else:
func(*args)
return wrapper
Обратите внимание, как возвращается wrapper
, и она вызывает func
после завершения проверки.