Почему struct.pack выдает исключение, которое, похоже, не имеет типа? - PullRequest
2 голосов
/ 05 апреля 2019

Я хочу использовать правильный тип исключения вместо универсального except Exception, однако я не уверен, как найти правильный тип. Вот фрагмент кода для демонстрации поведения. Передача None вместо целого числа недопустима, поскольку он пытается упаковать его в беззнаковое длинное.

>>> import struct
>>> try:
...     b = struct.pack("L", None)
... except Exception as ex:
...     print(f"An exception of type {type(ex).__name__} occurred. {ex.args}")
...
An exception of type error occurred. ('required argument is not an integer',)

Каков рекомендуемый способ отловить исключение из пакета? Или я застрял с проверкой всех аргументов pack(), чтобы убедиться, что они действительны?

1 Ответ

2 голосов
/ 05 апреля 2019

Вы видите исключение типа struct.error, очевидно.

Как указано в документах :

исключение struct.error

Исключение, поднятое в различных случаях; Аргумент - это строка, описывающая, что не так.

Если вы просто сделаете

 print(f"{type(ex)}")

печатает <class 'struct.error'>


Также просто для подтверждения

try:
    struct.pack("L", None)
except struct.error as ex:
    print("Caught")

отпечатков Caught

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...