SystemExit и NameError проблемы с выходом - PullRequest
2 голосов
/ 29 сентября 2011
def main():
    try:
        print "hardfart"
        return 0
    except:
        return 1

if __name__ == '__main__':
    exit(main())

Может ли один добрый программист сказать мне, почему это выдает следующую ошибку при выходе?

Traceback (most recent call last):
File "C:/Apps/exp_exit.py", line 9, in ,module.
exit(main())
File "C:\Apps\python2.7.2\lib\site.py", line 372 in __call__
    raise SystemExit(code)
SystemExit: 0

Это вызывает ошибку при выходе в проекте, который настроен аналогично. Для этого проекта, после использования gui2exe для компиляции exe, при закрытии программы я получаю следующую ошибку:

Traceback (most recent call last):
  File "checkHDBox.py", line 303, in <module>
NameError: name 'exit' is not defined

Итак, если exit генерирует эту ошибку, как мне выйти тогда? И если я создаю обработчик исключений для выхода, не заменит ли это действие по умолчанию, которое python выполняет, функцией выхода?

Спасибо.

Edit:

Я думаю, что это отвечает на мой собственный вопрос.

Трассировка здесь от IDLE, я думаю, что это поведение по умолчанию из других источников, которые я прочитал.

Traceback (most recent call last):
File "C:/Apps/exp_exit.py", line 9, in ,module.
exit(main())
File "C:\Apps\python2.7.2\lib\site.py", line 372 in __call__
    raise SystemExit(code)
SystemExit: 0

Трассировка здесь была исправлена ​​с помощью sys.exit () вместо exit (0)

Traceback (most recent call last):
  File "checkHDBox.py", line 303, in <module>
NameError: name 'exit' is not defined

1 Ответ

1 голос
/ 29 сентября 2011

Вы выходите из программы, подняв SystemExit. Это то, что делает exit(). Кто-то неправильно написал обработчик исключений, который перехватывает все исключения. Вот почему вы ловите только те исключения, которые можете обработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...