退出时的SystemExit和NameError问题

2 投票
1 回答
2668 浏览
提问于 2025-04-17 03:22
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

那么,如果退出时会产生这个错误,那我该怎么退出呢?如果我为退出创建一个异常处理器,这是不是就替代了Python在执行退出时的默认操作呢?

谢谢。

编辑:

我想这可能回答了我自己的问题。

这里的错误追踪信息来自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

你可以通过抛出 SystemExit 来退出一个程序。这就是 exit() 的作用。有些人错误地写了一个异常处理程序,它会捕捉所有的异常。这就是为什么你只应该捕捉那些你能处理的异常。

撰写回答