Русский
Открыть в Telegram

Пост Когда вы используете модуль multiprocessing, и в одном из процессов происходит исключение, оно передаётся в основную про…

20 октября 2026
Б
Библиотека Python разработчика | Книги по питону
Когда вы используете модуль multiprocessing, и в одном из процессов происходит исключение, оно передаётся в основную программу с помощью механизма сериализации (pickling). Исключение сериализуется, передаётся в другой процесс и там десериализуется обратно. Однако сериализация исключений может быть непростой задачей. Исключение создаётся с любым количеством аргументов, которые сохраняются в атрибуте args. Эти же аргументы используются при десериализации для воссоздания объекта исключения. Но это может не сработать так, как вы ожидаете, особенно если используется наследование. Посмотрите на пример: import pickle class TooMuchWeightError(Exception): def __init__(self, weight): super().__init__() self._weight = weight pickled = pickle.dumps(TooMuchWeightError(42)) pickle.loads(pickled) Вызов TooMuchWeightError.__init__ приводит к вызову Exception.__init__, который устанавливает args как пустой кортеж. Этот пустой кортеж затем используется в качестве аргументов при десериализации, что, очевидно, приводит к ошибке: TypeError: __init__() missing 1 required positional argument: 'weight' Обходное решение — либо вообще не вызывать super().__init__() (что обычно считается плохой практикой при наследовании), либо передавать все аргументы явно в конструктор родительского класса: class TooMuchWeightError(Exception): def __init__(self, weight): super().__init__(weight) self._weight = weight 📲 Мы в MAX 👉@BookPython
🔥1👍1
103 ·

Рядом в ленте

ББиблиотека Python разработчика | Книги по питонуФункция super() позволяет обращаться к родительскому (базовому) классу. Это может быть очень полезно в случаях, когда производный класс хочет добавить что-то к ББиблиотека Python разработчика | Книги по питонуФункция map вызывает другую функцию для каждого элемента итерируемого объекта. Это значит, что функция должна принимать одно значение в качестве аргумента: In :
это сообщение
ББиблиотека Python разработчика | Книги по питонуyield from — элегантная передача управления Если вы пишете генераторы, которые вызывают другие генераторы — забудьте про for x in sub(): yield x. Есть способ прББиблиотека Python разработчика | Книги по питонуdefault_factory в dataclass: мощнее, чем кажется Многие используют dataclass как удобный способ задать структуру с полями. Но редко кто по-настоящему раскрывает
ББиблиотека Python разработчика | Книги по питонуБиблиотека Python разработчика | Книги по питону@BookPython · канал · Технологии
17 954подписчиков552средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем