说我有以下四个变量:
>>> f1 = (print, 1, 2 ,3 ,4) >>> f2 = (exit, 1, 2 ,3 ,4) >>> f3 = (1, 2, 3, 4) >>> f4 = 4
在一个假设的程序中,我希望每个变量都包含一个元组,其第一个项应该是函数的名称,其后续项应该按顺序表示函数的参数.
我可以像这样调用以这种方式存储的函数:
>>> f1[0](*f1[1:]) 1 2 3 4
但是,大多数这些变量都不是例外格式,我希望能够封装它们在try
/ except
blocks中的调用,以便处理这些情况.
现在,即使函数调用了f2
,f3
并且f4
由于完全不同的原因而中断,它们都会抛出同样的异常,a TypeError
:
>>> f2[0](*f2[1:]) Traceback (most recent call last): File "", line 1, in TypeError: __call__() takes from 1 to 2 positional arguments but 5 were given >>> f3[0](*f3[1:]) Traceback (most recent call last): File " ", line 1, in TypeError: 'int' object is not callable >>> f4[0](*f4[1:]) Traceback (most recent call last): File " ", line 1, in TypeError: 'int' object is not subscriptable
这样做一般:
try: f[0](*f[1:]) except TypeError: # handle exception
不会为我提供足够的信息来相应地处理每个例外.
在Python中区分相同类型的不同异常的正确方法是什么?