捕获特定的Windows错误号-python

时间:2018-09-27 16:13:57

标签: python windows exception

我正在python中创建一个新的嵌套目录(data_dir = 'parent\child'

try:
    os.mkdir(data_dir)
except WindowsError:
    pass   

如果父目录'parent'不存在(但是,因为可能稍后在代码中进行设置),则代码将其捕获为Windows Error 3并继续前进。

但是现在Windows Error 206也可能发生,这是文件名或扩展名太长的时候。为此,我需要采取单独的措施。


是否有一种方法可以区分Windows Error 3206(以及其他),从而产生独特的Exceptions

2 个答案:

答案 0 :(得分:2)

您可以使用WindowsError.winerror(从 OSError 继承:[Python 3]: winerror)来区分基本错误。像这样:

>>> def create_dir(path):
...     try:
...         os.mkdir(path)
...     except WindowsError as e:
...         if e.winerror == 3:
...             print("Handling WindowsError 3")
...         elif e.winerror == 206:
...             print("Handling WindowsError 206")
...         else:
...             print("Handling other WindowsError")
...     except:
...         print("Handling other exceptions")
...
>>>
>>> create_dir("not/existing")
Handling WindowsError 3
>>> create_dir("a" * 228)
Handling WindowsError 206
>>> create_dir(":")
Handling other WindowsError

当然,使用[Python 3]: os.makedirs(name, mode=0o777, exist_ok=False)可以轻松避免 WindowsError 3

答案 1 :(得分:0)

除了CristiFati-s解决方案之外,避免幻数的更好方法是使用pywin32模块的winerror:

     import winerror
     try:
         os.mkdir(path)
     except WindowsError as e:
         if e.winerror == winerror.ERROR_PATH_NOT_FOUND:
             print("Handling WindowsError 3")
         elif e.winerror == winerror.ERROR_FILENAME_EXCED_RANGE:
             print("Handling WindowsError 206")
         else:
             print("Handling other WindowsError")
     except:
         print("Handling other exceptions")