Существует ли кроссплатформенный способ получения информации из OSError в Python?
Например, для простой операции создания каталога я могу сделать OSError следующим образом:
(Ubuntu Linux)
>>> import os
>>> os.mkdir('foo')
>>> os.mkdir('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 17] File exists: 'foo'
Теперь я могу уловить эту ошибку следующим образом:
>>> import os
>>> os.mkdir('foo')
>>> try:
... os.mkdir('foo')
... except OSError, e:
... print e.args
...
(17, 'File exists')
Есть ли кросс-платформенный способ узнать, что 17 или "Файл существует" всегда будут означать одно и то же, чтобы я мог действовать по-разному в зависимости от ситуации?
(Это возникло во время другого вопроса.)
1 ответ
errno
Атрибут на ошибку должен быть одинаковым на всех платформах. Ты получишь WindowsError
исключения в Windows, но так как это подкласс OSError то же самое "except OSError:
"Блок поймает его. Windows имеет свои собственные коды ошибок, и они доступны как .winerror
, но .errno
атрибут все еще должен присутствовать и использоваться кроссплатформенным способом.
Символические названия для различных кодов ошибок можно найти в errno
модуль. Например,
import os, errno
try:
os.mkdir('test')
except OSError, e:
if e.errno == errno.EEXIST:
# Do something
Вы также можете выполнить обратный поиск (чтобы узнать, какой код вы должны использовать) с errno.errorcode
, То есть:
>>> errno.errorcode[17]
'EEXIST'