Получение номера ошибки ошибки
Мне нужно получить номер ошибки из ошибки, произошедшей в Python.
Ех; При попытке передать каталог через пакет Paramiko ошибка попадает в эту часть кода:
try:
sftp.put(local_path,target_path)
except (IOError,OSError),errno:
print "Error:",errno
Для чего я получаю вывод,
Error: [Errno 21] Is a directory
Я хочу использовать номер ошибки, чтобы перейти к еще одному коду для переноса каталога и содержимого каталога.
Ответы
Ответ 1
Спасибо за разъяснение вашего вопроса.
Большинство Exception
в Python не имеют "номеров ошибок". Одно исключение (без каламбура) - это исключения HTTPError
, например:
import urllib2
try:
page = urllib2.urlopen("some url")
except urllib2.HTTPError, err:
if err.code == 404:
print "Page not found!"
else:
...
Другим исключением (как отмечено bobince) являются EnvironmentError
s:
import os
try:
f=open("hello")
except IOError, err:
print err
print err.errno
print err.strerror
print err.filename
выходы
[Errno 2] No such file or directory: 'hello'
2
No such file or directory
hello
Ответ 2
Если вы говорите о числах ошибок errno.h
, вы можете получить их из свойства errno
объекта исключения, но только на EnvironmentError
(который включает в себя OSError
, IOError
и WindowsError
).
В частности, в WindowsError
вы также получите свойство winerror
с номером ошибки, зависящей от Windows. (Вы не часто видите один из них, хотя Python использует API Win32 относительно редко.)
Ответ 3
Существует также errno
пакет, который позволяет работать с кодами ошибок, не имея необходимости обрабатывать магические числа в коде. См. Пример здесь: Являются ли номера ошибок Python связанными с стабильностью IOError?