2013-03-08 3 views
6

Для типа конкретных исключений (скажем, для IOError), как я могу извлечь полный список Errnos и описаний, как это:Как получить список номеров ошибок (Errno) для типа Exception в python?

Errno 2: Нет такого файла или каталога

Errno 122: Дисковая квота превышена

...

+0

http://hg.python.org/cpython/file/ca9a85c36e09/Include /errcode.h –

ответ

6

Поскольку error codes отличаются от платформы и языка пользователя может отличаться, это обычно лучше всего печатать исключение в обычном режиме.

Однако, если вы действительно хотите список:

import os 
import errno 

print {i:os.strerror(i) for i in sorted(errno.errorcode)} 

распечаток (на OS X):

{1: 'Operation not permitted', 2: 'No such file or directory', 3: 'No such process', 4: 'Interrupted system call', 5: 'Input/output error', 6: 'Device not configured', 7: 'Argument list too long', 8: 'Exec format error', 9: 'Bad file descriptor', 10: 'No child processes', 11: 'Resource deadlock avoided', 12: 'Cannot allocate memory', 13: 'Permission denied', 14: 'Bad address', 15: 'Block device required', 16: 'Resource busy', 17: 'File exists', 18: 'Cross-device link', 19: 'Operation not supported by device', 20: 'Not a directory', 21: 'Is a directory', 22: 'Invalid argument', 23: 'Too many open files in system', 24: 'Too many open files', 25: 'Inappropriate ioctl for device', 26: 'Text file busy', 27: 'File too large', 28: 'No space left on device', 29: 'Illegal seek', 30: 'Read-only file system', 31: 'Too many links', 32: 'Broken pipe', 33: 'Numerical argument out of domain', 34: 'Result too large', 35: 'Resource temporarily unavailable', 36: 'Operation now in progress', 37: 'Operation already in progress', 38: 'Socket operation on non-socket', 39: 'Destination address required', 40: 'Message too long', 41: 'Protocol wrong type for socket', 42: 'Protocol not available', 43: 'Protocol not supported', 44: 'Socket type not supported', 46: 'Protocol family not supported', 47: 'Address family not supported by protocol family', 48: 'Address already in use', 49: "Can't assign requested address", 50: 'Network is down', 51: 'Network is unreachable', 52: 'Network dropped connection on reset', 53: 'Software caused connection abort', 54: 'Connection reset by peer', 55: 'No buffer space available', 56: 'Socket is already connected', 57: 'Socket is not connected', 58: "Can't send after socket shutdown", 59: "Too many references: can't splice", 60: 'Operation timed out', 61: 'Connection refused', 62: 'Too many levels of symbolic links', 63: 'File name too long', 64: 'Host is down', 65: 'No route to host', 66: 'Directory not empty', 68: 'Too many users', 69: 'Disc quota exceeded', 70: 'Stale NFS file handle', 71: 'Too many levels of remote in path', 77: 'No locks available', 78: 'Function not implemented', 84: 'Value too large to be stored in data type', 90: 'Identifier removed', 91: 'No message of desired type', 92: 'Illegal byte sequence', 94: 'Bad message', 95: 'EMULTIHOP (Reserved)', 96: 'No message available on STREAM', 97: 'ENOLINK (Reserved)', 98: 'No STREAM resources', 99: 'Not a STREAM', 100: 'Protocol error', 101: 'STREAM ioctl timeout', 102: 'Operation not supported on socket'}  
+0

+1 Я знаю, как печатать исключение :), но ссылка была очень полезной. – jurgenreza

+0

Выполняет ли 'os.strerror' то, что вам нужно? –

+0

Это именно то, что я искал, большое спасибо. Не возражаете ли вы удалить часть исключения для печати, чтобы я мог выбрать ее в качестве ответа? Мне также нужно сейчас отредактировать вопрос, что я знаю, в чем дело. – jurgenreza

5

Я боюсь тех, кто пришел прямо из стандартной библиотеки C, так что вам придется искать его в документации по системе. (GLibC, Microsoft, UNIX ...)

+0

thanks .. Вы имеете в виду, что errnos может отличаться для той же ошибки (например, файл не найден) на разных ОС? – jurgenreza

+0

Да, они есть. Пара дюжины должна быть одинаковой во всех UNIX-системах (таких как Linux, BSD и Mac OS X), но большинство из них будут разными, даже в разных версиях одной и той же системы. Если вы добавите Windows в уравнение, все ставки будут отключены. Вы не должны полагаться на эти цифры вообще. На самом деле вам лучше использовать модуль 'errno' для перевода чисел в идентификаторы (ENOENT, EPERM ...), как и другие. – Tobia

+0

+1 ценю вашу помощь – jurgenreza

4

Как уже было сказано, вы должны проверить <errno.h> вашей системы.

Если вы хотите сделать это в Python:

import errno 
print errno.errorcode 

выход будет

{1: 'EPERM', 2: 'ENOENT', 3: 'ESRCH', 4: 'EINTR', 5: 'EIO', 6: 'ENXIO', 7: 'E2BIG', 8: 'ENOEXEC', 9: 'EBADF', 10: 'ECHILD', 11: 'EDEADLK', 12: 'ENOMEM', 13: 'EACCES', 14: 'EFAULT', 15: 'ENOTBLK', 16: 'EBUSY', 17: 'EEXIST', 18: 'EXDEV', 19: 'ENODEV', 20: 'ENOTDIR', 21: 'EISDIR', 22: 'EINVAL', 23: 'ENFILE', 24: 'EMFILE', 25: 'ENOTTY', 26: 'ETXTBSY', 27: 'EFBIG', 28: 'ENOSPC', 29: 'ESPIPE', 30: 'EROFS', 31: 'EMLINK', 32: 'EPIPE', 33: 'EDOM', 34: 'ERANGE', 35: 'EAGAIN', 36: 'EINPROGRESS', 37: 'EALREADY', 38: 'ENOTSOCK', 39: 'EDESTADDRREQ', 40: 'EMSGSIZE', 41: 'EPROTOTYPE', 42: 'ENOPROTOOPT', 43: 'EPROTONOSUPPORT', 44: 'ESOCKTNOSUPPORT', 46: 'EPFNOSUPPORT', 47: 'EAFNOSUPPORT', 48: 'EADDRINUSE', 49: 'EADDRNOTAVAIL', 50: 'ENETDOWN', 51: 'ENETUNREACH', 52: 'ENETRESET', 53: 'ECONNABORTED', 54: 'ECONNRESET', 55: 'ENOBUFS', 56: 'EISCONN', 57: 'ENOTCONN', 58: 'ESHUTDOWN', 59: 'ETOOMANYREFS', 60: 'ETIMEDOUT', 61: 'ECONNREFUSED', 62: 'ELOOP', 63: 'ENAMETOOLONG', 64: 'EHOSTDOWN', 65: 'EHOSTUNREACH', 66: 'ENOTEMPTY', 68: 'EUSERS', 69: 'EDQUOT', 70: 'ESTALE', 71: 'EREMOTE', 77: 'ENOLCK', 78: 'ENOSYS', 84: 'EOVERFLOW', 90: 'EIDRM', 91: 'ENOMSG', 92: 'EILSEQ', 94: 'EBADMSG', 95: 'EMULTIHOP', 96: 'ENODATA', 97: 'ENOLINK', 98: 'ENOSR', 99: 'ENOSTR', 100: 'EPROTO', 101: 'ETIME', 102: 'EOPNOTSUPP'} 
+0

спасибо, это не то, что я ищу. Я имею в виду Errno, когда вызывается конкретное исключение python. Например, 122 в «IOError: [Errno 122] дисковая квота превышена». – jurgenreza

+2

ОК, я понял. Я думал, что Errnos отличается для каждого типа исключения. Я имею в виду, я думал, что у нас может быть 2 для IOError, а также для IndexError, например. Но это похоже на глобальный список. Я прав? – jurgenreza

+0

это мое понимание, если исключения используют стандартные системные символы errno – zzk