我的功能如下:
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.我怎么能实现这个?另外,如果我正在为此编写装饰器,我需要在装饰器外部保留函数的签名。
答案 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)