【发布时间】:2013-03-18 19:41:34
【问题描述】:
我正在为标准库的shutil.rmtree() 中的错误处理中的一个现有错误开发补丁,我遇到了以下代码:
try:
orig_st = os.lstat(path)
except Exception:
onerror(os.lstat, path, sys.exc_info())
return
try:
fd = os.open(path, os.O_RDONLY)
except Exception:
onerror(os.lstat, path, sys.exc_info())
return
在应用我的更改以简化实施之前,我想将其简化为以下内容:
try:
orig_st = os.lstat(path)
fd = os.open(path, os.O_RDONLY)
except Exception:
onerror(os.lstat, path, sys.exc_info())
return
两个代码示例之间的行为是否会有所不同?
【问题讨论】:
-
不要抓到
Exception。而是捕获特定的异常。 -
@MartijnPieters 我知道这是最佳实践,但不幸的是我无法打破
shutils.rmtreeAPI 中的向后兼容性,因此我必须保持onerror的当前处理,直到该功能被弃用和删除。 (onerror系统的混乱和复杂性实际上是我们试图用这个补丁修复的,但这将是一个多步骤的过程。)
标签: python exception exception-handling python-3.x