如何从旧的Python版本中隐藏不兼容的代码?

时间:2009-08-23 06:59:55

标签: python unit-testing

我正在为一个同时接受*args**kwargs参数的函数编写单元测试。此函数的合理用例是在*args段之后使用关键字参数,即格式

def f(a, *b, **c):
    print a, b, c

f(1, *(2, 3, 4), keyword=13)

现在只有became legal in Python 2.6;在早期版本中,上面的行是语法错误,因此甚至不会编译为字节码。

我的问题是: 如何测试较新的Python版本中提供的功能,并且仍然针对较旧的Python版本运行测试?

我应该指出,函数本身适用于早期的Python版本,只有一些调用是Python 2.6之前的语法错误。我看过用于检查Python版本的各种方法对此没有用,因为它没有超过编译阶段。

如果可能的话,我宁愿不必将测试分成多个文件。

3 个答案:

答案 0 :(得分:11)

我认为你不应该测试Python是否正常工作;相反,专注于测试自己的代码。这样做,完全可以以适用于所有Python版本的方式编写特定的调用,即:

f(1, *(2,3,4), **{'keyword':13})

答案 1 :(得分:2)

一种方法可能是使用eval()exec以及当前版本的Python测试。这会将编译推迟到运行时,您可以在其中控制编译是否实际发生。

答案 2 :(得分:1)

为什么要使用这样的语法?我的意思是,除了快捷方式之外,这个2.6功能并没有带来任何真正的优势。

a = [2,3,4]
a.insert(0, 1)
kw = {'keyword'='test'}
f(*a, **kw)
相关问题