在python中编写异常TypeError的代码

时间:2017-02-20 11:22:01

标签: python-2.7 python-3.x typeerror python-decorators

我的功能如下:

def fun(a,b,c=None): pass

当我在python 3中将此函数称为fun(1)时,它给出了TypeError: fun() missing 1 required positional argument: 'b'的错误,这是可以理解的,但是当我在python 2中调用此函数时,它给出了错误{{1} }。

所以我想在python 2中捕获这个错误,因为它在python 3中被捕获而没有切换到python 3.我怎么能实现这个?另外,如果我正在为此编写装饰器,我需要在装饰器外部保留函数的签名。

2 个答案:

答案 0 :(得分:1)

你想要达到什么目的? python2和python3都抛出' TypeError',这意味着调用者误用了函数' fun'

def foo(a, b, c = None):
    pass

try:
    foo(1)
except TypeError:
    print("TypeError")

为python2调用它:

python2 code_for_exception_type_error.py
TypeError

和python3:

python3 code_for_exception_type_error.py
TypeError

答案 1 :(得分:0)

您收到此错误的原因是您没有为参数“b”传递值。如果您不想为 'b' 传递值,请执行以下操作:

def fun(a, b = None, c = None):
    pass

fun(1)   

如果要为参数 b 传递一个值,请执行以下操作:

def fun(a, b, c = None):
    pass

bValue = None # whatever you want to pass for b
fun(1, bValue)