Python问题与异常

时间:2017-05-18 20:45:43

标签: python exception revit

我有一些问题让我的错误处理工作我已经筋疲力尽我的搜索和挖掘可以有人帮我一点。 基本上,我试图检查路径是否存在,如果它确实设置了file_location并移动到其他make目录,如果用户无权访问创建文件夹,则在用户My文档中创建该目录。

一切正常但是如果我试图强制错误使用我的文档,那么,我会收到错误,所以我不能100%确定我的将被执行除外。

try:
    if  os.path.exists(project_dir):
        file_location = (project_dir)
    else:
        os.makedirs(project_dir)
        file_location = (project_dir)
except OSError as exc:
    if exc.errno != errno.EEXIST:
         raise
    pass
    os.makedirs(user_dir)
    file_location = (user_dir)

1 个答案:

答案 0 :(得分:0)

为了清晰起见,稍微改变您的程序流程,并尝试保存异常处理程序,以便在程序以显着方式失败并需要警告用户或完全更改程序流程(异常情况)时。例外情况作为一种协议存在,当系统遇到问题时它无法修复

如果你必须跳出飞机,你想知道的最后一件事是没有降落伞可用。因此,在处理异常时,使用os.path.exists()告诉您路径是否有效。最安全的默认值是当前目录,可以使用.作为路径访问。但如果没有,您应该能够假设用户目录已存在,以防您的代码需要崩溃和刻录。在您必须处理异常之前,mkdir,而不是之后。

还要确保在python中正确缩进。间距也可以帮助捕获错误,因此在使代码更易于阅读时不要害怕使用换行符。您的try子句需要额外的缩进级别:

try:
    # simplify the if statement to stop repeating yourself
    if not os.path.exists(project_dir):
        os.makedirs(project_dir) 
    file_location = project_dir

except OSError as exc:
    if exc.errno != errno.EEXIST:
        raise # reraise the current exception

    if os.path.exists(user_dir):
        file_location = user_dir
    else: # FUBAR. Sound sirens immediately and try everything to keep the file somewhere in memory before failing.
        print("[ERROR] {} was inaccessible.\nWhile attempting to recover, {} did not exist so files could not be backed up."
            .format(project_dir, user_dir))
        raise

永远不应允许异常处理程序失败。这是一场灾难性的事件,您应该期待唯一的选择仍然是崩溃到桌面。可以捕获并恢复一个例外。两三个嵌套异常意味着您的计算机可能已经获得了感知并开始推翻其数字枷锁(或者您需要仔细思考为什么要处理异常)。