Модуль errno в Python предоставляет набор ошибок, которые возникают при системных вызовах. Эти ошибки представлены в виде целочисленных констант и часто возникают при работе с файлами, сокетами и другими ресурсами.

EACCES

Недостаточно прав для выполнения операции. Эта ошибка возникает, когда у процесса нет необходимых разрешений для доступа к файлу или ресурсу.

EADDRINUSE

Адрес уже используется. Эта ошибка возникает, когда программа пытается назначить сокету локальный адрес, который уже занят другим процессом.

  import socket

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('localhost', 8080))
except OSError as e:
    if e.errno == errno.EADDRINUSE:
        print("Адрес уже используется.")
  

EAGAIN

Временная ошибка, требующая повторения операции. Обычно используется с неблокирующими операциями, которые не могут быть выполнены немедленно.

EALREADY

Операция уже выполняется. Возникает, когда попытка соединения уже инициирована.

  import socket, errno

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost', 8080))
    s.connect(('localhost', 8080))  # Попытка повторного соединения
except ConnectionError as e:
    if e.errno == errno.EALREADY:
        print("Соединение уже выполняется.")
  

EBADF

Неверный файловый дескриптор. Возникает, когда операция вызывается для несуществующего или неподобающего дескриптора.

ECONNABORTED

Соединение прервано. Оговорённое соединение было неожиданно разорвано.

  import socket

try:
    s = socket.socket()
    # Допустим, соединение установлено и затем прервано
    # Это место для вставки кода управления соединением
except ConnectionAbortedError as e:
    if e.errno == errno.ECONNABORTED:
        print("Соединение было прервано.")
  

ECONNREFUSED

Соединение отклонено. Сервер отказался установить соединение, так как сервис на порту недоступен.

  import socket, errno

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost', 12345))
except ConnectionRefusedError as e:
    if e.errno == errno.ECONNREFUSED:
        print("Соединение отклонено.")
  

ECONNRESET

Сброс соединения. Соединение было принудительно разорвано другой стороной.

  import socket

try:
    s = socket.socket()
    # Сценарий с сервером, который сбрасывает соединения
except ConnectionResetError as e:
    if e.errno == errno.ECONNRESET:
        print("Соединение было сброшено другой стороной.")
  

EEXIST

Файл уже существует. Возникает при попытке создания файла, который уже существует.

EHOSTUNREACH

Хост недоступен. Не удается достичь удалённого хоста.

  import socket

try:
    s = socket.socket()
    s.connect(('192.0.2.1', 80))  # Используемый для демонстрационных целей адрес
except OSError as e:
    if e.errno == errno.EHOSTUNREACH:
        print("Хост недоступен.")
  

EINPROGRESS

Операция в процессе выполнения. Используется в неблокирующих сокетах во время установления соединения.

  import socket

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setblocking(False)
    s.connect(('localhost', 8080))
except BlockingIOError as e:
    if e.errno == errno.EINPROGRESS:
        print("Соединение в процессе выполнения.")
  

EINVAL

Неправильный аргумент. Тип или значение аргумента не подходит для вызова.

EIO

Ошибка ввода-вывода. Общая ошибка работы с устройством или файлом.

EISDIR

Операция не может быть выполнена, поскольку объект является директорией.

ENOBUFS

Недостаточно буферов. Является системной ошибкой в сокетах.

  import socket

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except OSError as e:
    if e.errno == errno.ENOBUFS:
        print("Недостаточно буферной памяти.")
  

ENODEV

Устройство не существует. Операция запрашивает устройство или адресное пространство, которого не существует.

ENOENT

Нет такого файла или директории. Обычная ошибка при попытке доступа к несуществующему объекту.

ENOMEM

Недостаточно памяти для выполнения операции. Обычно возникает при недостатке оперативной памяти.

  try:
    large_list = [0] * (10**10)  # Попытка выделить очень большой объем памяти
except MemoryError as e:
    if e.errno == errno.ENOMEM:
        print("Недостаточно памяти.")
  

ENOTCONN

Сокет не подключен. Ожидалась работа с соединённым сокетом, но он ещё не был подключен.

  import socket

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.send(b'data')
except OSError as e:
    if e.errno == errno.ENOTCONN:
        print("Сокет не подключен.")
  

EOPNOTSUPP

Операция не поддерживается. Системный запрос или манипуляция не поддерживается.

  import socket

try:
    s = socket.socket()
    s.bind(('localhost', 0, 0))  # Неправильное использование bind
except OSError as e:
    if e.errno == errno.EOPNOTSUPP:
        print("Операция не поддерживается.")
  

EPERM

Отказ в операции. Недостаточные привилегии для выполнения операции.

ETIMEDOUT

Время ожидания соединения истекло. Соединение не было установлено за заданный промежуток времени.

  import socket

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(5)
    s.connect(('10.255.255.1', 80))  # Ненастраиваемый адрес, чтобы вызвать timeout
except OSError as e:
    if e.errno == errno.ETIMEDOUT:
        print("Время ожидания соединения истекло.")
  

errorcode

Это словарь, предоставляемый модулем errno, который связывает числовые значения ошибок с их символическими именами.

  import errno

error_number = 1  # Например, число для EPERM
print(errno.errorcode[error_number])  # Выведет: 'EPERM'