如何在 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
是如何工作的。我还查看了errno
documentation,但我不清楚它与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?的主要内容,如果未能解决你的问题,请参考以下文章