gpt4 book ai didi

python - 有没有关于条件 "except" block 的 Python 提议?

转载 作者:行者123 更新时间:2023-12-03 17:51:42 24 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

7年前关闭。




Improve this question




在系统编程中,调用一些可能会失败的库函数是很常见的,如果确实失败,请检查 errno确切的原因。即使在 Python 中也是如此,我认为它比它需要的更麻烦。让我们以一些尝试删除文件的代码为例,如果文件不存在,则以静默方式继续:

try:
sftp.unlink(path)
except IOError as ex:
if ex.errno != errno.ENOENT:
raise

我想知道在 Python 中是否曾经允许或提议做更多这样的事情:
try:
sftp.unlink(path)
except IOError as ex if ex.errno == errno.ENOENT:
pass

我认为这有几点值得推荐:
  • 更简洁。
  • 熟悉:因为我们已经可以捕获某些类型的异常,所以我们只捕获某些实际实例。未捕获的异常以通常的方式传播。
  • 不需要新的关键字,也不需要任何主要的新句法结构。

  • 如果以前没有考虑过这一点,我会感到惊讶,所以我会接受任何指向过去或未决提案的链接作为答案。我也接受一个答案,解释为什么上述内容会在现有语言中引入任何类型的问题(Python 3.x,因为我认为 2.x 大部分都被卡住了)。

    最佳答案

    我怀疑你是否会接受这个提议,但是你可以通过上下文管理器获得你想要的东西。尝试这个:

    import os

    class SuppressOSError(object):
    def __init__(self, *valid_errno):
    self.valid_errno = valid_errno

    def __enter__(self):
    return self

    def __exit__(self, ex_type, ex_value, traceback):
    if issubclass(ex_type, OSError) and ex_value.errno in self.valid_errno:
    return True # suppress exception

    with SuppressOSError(os.errno.ENOENT):
    os.remove('/tmp/no_such_file')
    print("This line will not be reached.")
    print("An exception was not raised.")

    上面打印“未引发异常”。

    您可以传入任意数量的 errno值(value)观;在我的例子中,我刚刚通过了一个。在 Python 2.7.4 中测试,应该适用于任何 Python 2.5 或更新版本。

    关于python - 有没有关于条件 "except" block 的 Python 提议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19807281/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com