如果文件不存在,则正常退出

Jak*_*rka 21 python python-idle

我在Python 3.2.3中有以下脚本:

try:
    file = open('file.txt', 'r')
except IOError:
    print('There was an error opening the file!')
    sys.exit()

#more code that is relevant only if the file exists
Run Code Online (Sandbox Code Playgroud)

如果文件不存在(或打开它只是一个错误),如何正常退出?

我可以使用exit(),但会打开一个对话框面板,询问我是否要杀死该应用程序.

我可以使用sys.exit(),但这会引发一个SystemExit异常,它在输出中看起来不太好.我明白了

Traceback (most recent call last):   
File "file", line 19, in <module>
    sys.exit() SystemExit
Run Code Online (Sandbox Code Playgroud)

我可以使用os.exit(),但这会在C级别上杀死Python,而不会进行任何我可能正在执行的清理工作.

我可以使用布尔变量并将所有后续代码包装在if ...但这很难看,这不是我正在执行的唯一检查.所以我想要六个嵌套的ifs ......

我只想打印'有一个错误......'并退出.我在IDLE工作.

Hub*_*bro 17

这是一种非常优雅的方式.SystemExit回溯不会在IDLE之外打印.(可选)您可以使用sys.exit(1)向shell指示脚本以错误终止.

或者,您可以在"main"函数中执行此操作并使用return终止应用程序:

def main():
    try:
        file = open('file.txt', 'r')
    except IOError:
        print('There was an error opening the file!')
        return

    # More code...

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

这里,应用程序的主要执行代码封装在一个名为"main"的函数中,然后在脚本由Python解释器直接执行时执行,或者换句话说,如果脚本没有被另一个脚本导入.(__name__如果直接从命令行执行脚本,则变量设置为"__main__".否则将设置为模块的名称.)

这样做的好处是可以将所有脚本执行逻辑收集到一个函数中,使脚本更清晰,并使您能够使用该return语句干净地退出脚本,就像在大多数编译语言中一样.