Какое исключение выдает Python, если у него недостаточно прав для доступа к файлу? - PullRequest
0 голосов
/ 04 июля 2018

Под разрешениями я имею в виду Unix-подобные разрешения для файловой системы

Я ищу более точное исключение, чем OSError, которое срабатывает также, когда файл не существует

Ответы [ 2 ]

0 голосов
/ 11 июля 2018

Хорошо, позвольте мне показать вам ...

В Python 2.7.x:

=> этот файл не существует:

>>> try:
...     open("foo.bar")
... except Exception as e:
...     e1 = e
... 
>>> e1
IOError(2, 'No such file or directory')

=> Это существует, но у меня нет прав на него

>>> try:
...     open("/root/foo.txt")
... except Exception as e:
...     e2 = e
... 
>>> e2
IOError(13, 'Permission denied')
>>> 

Так что здесь вы не можете проверить на e.args[0], который также доступен как e.errno

>>> e2.args[0]
13
>>> e2.errno
13
>>> 

На Python 3.4.x

>>> try:
...     open("foo.bar")
... except Exception as e:
...     e1 = e
... 
>>> e1
*FileNotFoundError(2, 'No such file or directory')
>>> 

>>> try:
...     open("/root/foo.txt")
... except Exception as e:
...     e2 = e
... 
>>> e2
PermissionError(13, 'Permission denied')

Здесь у вас есть два различных подкласса OSError, поэтому вы можете либо установить два различных подкласса, за исключением предложений, либо - как в python2, но с использованием OSError вместо IOError - использовать одно исключение и проверить e.errno.

И, как вы можете видеть, самостоятельное тестирование занимает около 2 минут, что, безусловно, НАМНОГО меньше, чем понадобилось вам, чтобы подключиться к SO, опубликовать свой вопрос, ответить на комментарии, отредактировать свой вопрос и т. Д. и тд и тп ...

0 голосов
/ 04 июля 2018

Вы должны взглянуть на IOError

https://docs.python.org/2/library/exceptions.html

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