Получение номера ошибки ошибки

Мне нужно получить номер ошибки из ошибки, произошедшей в 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 относительно редко.)