Поймать определенный номер ошибки Windows - python - PullRequest
0 голосов
/ 27 сентября 2018

Я создаю новый вложенный каталог (data_dir = 'parent\child') в python:

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

Если родительский каталог 'parent' не существует (пока, потому что я могу установить позже в коде), затем код перехватил это как Windows Error 3 и продолжил.

Однако теперь также может произойти Windows Error 206, когда имя файла или расширение слишком длинное.Для чего мне нужно было бы предпринять отдельное действие.


Есть ли способ провести различие между Windows Error 3 и 206 (и другими), чтобы вызвать различное Exceptions?

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете использовать 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

Конечно, WindowsError 3 можно легко избежать, используя [Python 3]: os. makedirs ( name, mode = 0o777, exist_ok = False ) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...