为什么struct.pack抛出似乎没有类型的异常?

时间:2019-04-05 20:17:25

标签: python exception

我想使用正确的异常类型而不是通用的except Exception,但是,我不确定如何找到正确的异常类型。这是演示此行为的代码段。不允许传入None而不是整数,因为它试图将其打包为无符号long。

>>> 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 个答案:

答案 0 :(得分:2)

您显然正在捕获类型为struct.error的异常。

docs中所述:

  

异常struct.error

     

在各种场合引发异常;参数是描述错误的字符串。

如果你愿意

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

它打印<class 'struct.error'>


还要确认

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

打印Caught