2017-02-20 158 views
0

异常类型错误写代码我有一个功能,它看起来像这样:在蟒蛇

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

当我把这个功能在Python 3 fun(1),它给了我错误的TypeError: fun() missing 1 required positional argument: 'b'这是可以理解的,但是当我在Python 2中调用这个函数,它给我错误为TypeError: fun() takes at least 2 arguments (1 given)

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

+0

类型的错误没有什么不同,这是不同的信息。默认消息在'C'中定义,不能直接通过Python进行修改。您可以在Python 2中捕获异常,并在Python 3中用类似的异常消息重新引发异常(但需要大量内省调用堆栈和函数对象以查找调用中缺少的参数)。 –

+0

我是python的新手。你能建议我做点什么吗? @ JimFasarakis-Hilliard –

+0

老实说?只是不要使用Python 2是最好的建议。因为这个决定可能不是你自己决定的,不过,你总是可以看看stdlib中的'inspect'模块,它提供了内省功能,可以帮助你解决你的问题。 –

回答

1

你想达到什么目的? python2和python3都抛 '类型错误',这意味着调用者滥用功能 '乐趣'

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 
+0

我正在使用python2。在我的模块中,我有一个像上面这样的函数。现在,当其他人将使用我的模块的这个函数(有趣的写在上面的问题)与不正确的参数,我想抓住这个事情,并写一条消息,显示哪些位置参数丢失。 Python3在内部处理这个事情,但不是Python 2.所以我怎么能在python2中做这件事情,并用消息抛出我的自定义错误。我希望我现在清楚。 –