【发布时间】:2017-07-09 15:42:02
【问题描述】:
我有一个看起来像这样的函数:
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。我怎样才能实现这一点?另外,如果我为此编写装饰器,我需要在装饰器之外保留函数的签名。
【问题讨论】:
-
错误的类型没有区别,只是消息不同。默认消息在
C中定义,无法直接通过 Python 进行更改。您可以在 Python 2 中捕获异常并在 Python 3 中使用类似的异常消息重新引发它(但这需要大量自省调用堆栈和函数对象以在调用中找到丢失的 arg)。 -
我是 python 新手。你能建议我做点什么吗? @JimFasarakis-Hilliard
-
诚实吗?只是不要使用 Python 2 是最好的建议。但是,由于此决定可能不是您的决定,因此您可以随时查看 stdlib 中的
inspect模块,该模块提供的自省功能应该有助于您实现目标。 -
谢谢。我会调查的
标签: python-2.7 python-3.x typeerror python-decorators