如何在没有嵌套异常的情况下处理python中的文件

时间:2011-03-09 17:04:38

标签: python exception-handling

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

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 个答案:

答案 0 :(得分:2)

另一种方法是在尝试对其执行操作之前检查文件是否存在,这可能有助于消除一些try / except块。您可以使用os.path.exists()。 os.path中还有其他功能,您可能会发现它们也很有用。

话虽如此,Python旨在处理EAFP(更容易请求宽恕而不是权限)原则下的异常,因此肯定会出现需要捕获异常的情况。

另一方面,我还建议不要使用没有限定符的try / except块,因为它会捕获任何类型的异常,而不仅仅是与文件访问有关的错误。

答案 1 :(得分:0)

使用Python的with statement