如何在 try except 块中检查某种类型的 OSError?

Posted

技术标签:

【中文标题】如何在 try except 块中检查某种类型的 OSError?【英文标题】:How do I check for a certain type of OSError in a try except block? 【发布时间】:2016-06-25 18:45:37 【问题描述】:

我有一些代码可能会根据用户的输入引发OSError。更具体地说,它可以提高OSError: [WinError123]。我面临的问题是我的 try except 块检查 OSError 这是一个太广泛的异常。

我看过这个question 和这个question 但是,我不清楚errno 是如何工作的。我还查看了errnodocumentation,但我不清楚它与OSError 中的特定错误有何关系。

如何捕获特定的OSError,即WinError 123

另外,如果你能向我解释你使用了哪些库/你是如何做到的/你的解决方案的思考过程会很棒!

【问题讨论】:

捕获 WinError 并检查 errno docs.python.org/2/library/… @PadraicCunningham 好的,errno 是 22。那么捕获这个特定错误的唯一方法是在我的 except 块中添加一个 if 语句吗?没有像except OSError.WinError123:这样的代码吗? 是的,这是python3的文档docs.python.org/3.5/library/exceptions.html#OSError.winerrordocs.python.org/3.5/library/exceptions.html#WindowsError 不,你需要捕获一般异常然后检查errno 好的,明白了。我尝试过except NotaDirectoryError:,但没有成功。 【参考方案1】:

你能不能不这样做:

try:
    my_function()
except OSError as e:
    if e.args[0] != 123:
        raise
    print("Deal with the 123 error here")

【讨论】:

我尝试这样做时得到以下输出:os.chdir(paths) OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: '' 所以我认为您提出的代码可能不起作用? B/c 它没有忽略 WinError123 如何复制此错误?编辑:没关系。我能够做到。 errno 是 22,但 e[0] 是 123。 在 OP 评论部分查看我与 Padraic 的讨论。 errno 是 22 由实验确定的。 好吧,我已经更新了。它不使用errno,它只选择WinError 123。 对于python 3(和2.7?),您似乎需要使用if e.winerror != 123:

以上是关于如何在 try except 块中检查某种类型的 OSError?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地在try / except块中引发异常

如何使用多个catch块处理异常

为啥在 try/except 块中使用 Python 的“else”子句? [复制]

将类的所有可能的方法调用包装在 try/except 块中

如何检查线程代码是不是在 try-catch 块中运行

PHP 检查抛出的异常类型