2011-03-09 71 views
0

我正在写一个python脚本来执行一些基本的CM功能,如在颠覆中标记。检查我知道如何在python中执行的唯一错误是捕获异常。作为编写代码来测试各种文件和目录的存在,我得到了所有这些嵌套的try/except块。如何在没有嵌套异常的情况下处理python中的文件

try: 
    os.stat("dist") 
    print "mv " + distname + " dist" 
    try: 
    os.remove("dist/"+distname) 
    except: 
    pass 
    shutil.move([distname, "dist"]) 
except: 
    # Code if dist didn't exist before we got here 

有没有更好的方法来写这个 - 比如if语句而不是异常块 - 或者这只是Python的工作方式?我真的很讨厌我将逻辑实现为异常块。

回答

2

另一种方法是在尝试对其执行操作之前检查文件是否存在,这可能有助于消除某些尝试/除外块。您可以使用os.path.exists()。 os.path中还有其他一些函数,您可能也会发现它们很有用。这就是说,Python被设计为在EAFP(易于请求宽恕而不是权限)原则下工作,所以肯定会出现需要捕获异常的情况。

在另一个说明我也建议反对尝试/除了没有限定符的块,因为这将捕获任何类型的异常,而不仅仅是与文件访问相关的错误。

+0

谢谢。这正是我想要的。文档中有这么多,我没有看到exists()。 我不介意捕捉异常的异常,但我反对将它们用作程序正常路径的逻辑语句。 – 2011-03-09 17:20:25

相关问题