Ответ 1
Лучший прямой способ исправить это - удалить объявление global
из-под if __name__ == '__main__':
. Вам это не нужно. В отличие от некоторых других языков, оператор if
не вводит новую область в Python - любые переменные, которые вы назначаете в этом блоке, являются глобальными, так же, как они были бы без if
.
Это также объясняет, почему это ошибка: объявить переменную как global
, вам не разрешено использовать это имя переменной ранее в той же области (предположительно, потому что это было бы путаницей для оператора global
делать назначения перед тем, как перейти к глобальной переменной, а Python не поддерживает одно и то же имя, являющееся как глобальным, так и локальным в той же области). Поскольку if
не вводит новую область, первое присваивание ret_code
находится в той же области, что и глобальная декларация под if
; но глобальная декларация приходит позже назначения, что не допускается.
Для еще лучшего исправления рассмотрите, можете ли вы полностью удалить изменчивое глобальное состояние из своей программы, поскольку оно обычно вызывает больше проблем, чем его ценность где-то позади. Здесь представляется вероятным, что вы используете ret_code
в качестве кода выхода программы, т.е. Вы будете где-то делать sys.exit(ret_code)
, но вы решаете внутри функции, которая выдает код для использования. Вместо этого передайте достаточно информации обратно в код верхнего уровня, чтобы решить, какой код выхода использовать.