Monday, August 1, 2022

Cross-platform way of getting information from Python's OSError

Атрибут errno ошибки должен быть одинаковым на всех платформах. Вы должны получить исключение  WindowsError в Windows, но, поскольку это подкласс OSError, тот же блок «кроме OSError:» поймает его. Windows имеет свои собственные коды ошибок, и они доступны как .winerror, но атрибут .errno все равно должен присутствовать и использоваться кросс-платформенным способом. Смотри https://docs.python.org/3/library/exceptions.html

exception OSError




Символические имена для различных кодов ошибок можно найти в модуле errno.

(.env) boris@boris-All-Series:~/ATRERRNO$ ll

total 24

drwxrwxr-x   3 boris boris  4096 авг  1 12:09 ./

drwxr-xr-x 140 boris boris 12288 авг  1 12:01 ../

drwxrwxr-x   6 boris boris  4096 авг  1 11:55 .env/

-rw-rw-r--   1 boris boris   174 авг  1 12:09 errnoCross.py

(.env) boris@boris-All-Series:~/ATRERRNO$ cat errnoCross.py

import os, errno

try:

    os.mkdir('myfolder')

except OSError as e:

  if e.errno == errno.EEXIST:

    print(e)

    print('Failure to create myfolder was caught')

else:

    print('Done') 

(.env) boris@boris-All-Series:~/ATRERRNO$ python3 errnoCross.py

Done

(.env) boris@boris-All-Series:~/ATRERRNO$ ll

total 28

drwxrwxr-x   4 boris boris  4096 авг  1 12:10 ./

drwxr-xr-x 140 boris boris 12288 авг  1 12:01 ../

drwxrwxr-x   6 boris boris  4096 авг  1 11:55 .env/

-rw-rw-r--   1 boris boris   174 авг  1 12:09 errnoCross.py

drwxrwxr-x   2 boris boris  4096 авг  1 12:10 myfolder/

(.env) boris@boris-All-Series:~/ATRERRNO$ python3 errnoCross.py

[Errno 17] File exists: 'myfolder'

Failure to create myfolder was caught




















No comments:

Post a Comment