如果文件不存在退出优雅(Exit gracefully if file doesn't ex

2019-08-02 20:22发布

我已经在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

如何退出摆好,如果文件不存在(或存在根本错误打开它)?

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

我可以使用sys.exit()这又引出一个SystemExit例外,这不看在输出大。 我得到

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

我可以使用os.exit()但杀死的Python的C水平,没有任何清理我可能会被执行。

我可以用一个布尔变量和包装所有后续的代码,如果...但是,这是丑陋的,这不是我执行的唯一检查。 所以,我会像6个嵌套IFS ...

我只是想打印的“有一个错误......”并退出。 我在空闲的工作。

Answer 1:

这是做一个非常优雅的方式。 该SystemExit回溯不会IDLE以外打印。 您也可以选择使用sys.exit(1)以指示脚本一个误差终止外壳。

另外,您可以在您的“主要”功能和使用做到这一点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()

这里的应用程序的主要执行代码被封装在称为“主”的单一功能,则如果脚本由Python解释直接执行,或者换句话说, 执行,如果脚本它没有被其它脚本导入。 (该__name__变量被设置为“__main__”,如果正在从直接从命令行执行的脚本,否则将被设置到该模块的名称)。

这有收集所有的脚本执行逻辑到一个单一的功能,使你的脚本更清洁的优势,使您可以使用完全退出你的脚本return的语句,就像在大多数编译语言。



Answer 2:

使用sys.exit()的罚款。 如果您是关注的输出,你可以随时错误处理部分中添加一个额外的try / except块赶上SystemExit和被引导到控制台输出停止。

try:
    file = open('file.txt', 'r')
except IOError:
    try:
        print('There was an error opening the file!')
        sys.exit()
    except SystemExit:
        #some code here that won't impact on anything


文章来源: Exit gracefully if file doesn't exist