python - 将两个 Python try/except block 压缩为一个而不改变行为

标签 python exception python-3.x

我正在为标准库的 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

两个代码示例之间的行为是否存在不同?

最佳答案

在单线程应用程序中,两者不存在不同。不过,在多线程应用程序中,“路径”可能会在两个 try except 之间发生变化。

此代码是在修复符号链接(symbolic link)攻击漏洞的补丁中引入的 ( http://bugs.python.org/issue4489 )。也许您应该在更改后要求原始提交者进行代码审查。根据http://hg.python.org/cpython/annotate/c910af2e3c98/Lib/shutil.py#434 ,我是海尼克·施拉瓦克。

关于python - 将两个 Python try/except block 压缩为一个而不改变行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15485468/

相关文章:

exception - 在 Zend Form 中显示异常错误消息 - Zend Framework 2

python - 是否可以取消尚未捕获的异常?

python - 如何在python中导入父文件?

python - 将空白分隔数字列表转换为 float 列表

python - 类型错误 : unsupported operand type(s) for -: 'str' and 'str' when passing two dates

python - 参数化表填充

java - 为什么要编译?

python-3.x - 如何使用 WIN32COM python 包卡住 Excel 中的第一行?

python-3.x - 类型错误 : metaclass conflict python 3; django 2

python - 如何查看 Hypothesis Python 库的 "Bundle"输出? (状态测试)