我有一些代码可以返回repr
的例外情况。它需要在Python 2和Python 3上运行。
代码的一个非常愚蠢的版本如下:
from __future__ import unicode_literals
class Foo:
def bar(self):
return repr(Exception('bar'))
问题在于测试上面的代码。
Python 3.5:
foo = Foo()
assert foo.bar() == "Exception('bar',)"
# true
Python 2.7:
foo = Foo()
assert foo.bar() == "Exception('bar',)"
# false because foo.bar() returns "Exception(u'bar',)",
# note the ``u`` before the first ``'``
在断言两个字符串相等时,是否有一种优雅的方法可以忽略u
?我正在使用unittest2。
答案 0 :(得分:1)
没有简单的方法来改变"字符串相等。有一些方法可以进行近似匹配,但这可能会允许您不想要的其他更改。
解决问题的最佳方法是简单地更改assert
条件的定义方式。以下替代方案应该适用于python2& python3:
创建动态期望的异常:
assert foo.bar() == repr(Exception(u'bar'))
使用in
并检查两种选择:
assert foo.bar() in ("Exception('bar',)", "Exception(u'bar',)")
后者允许u'bar'
甚至在python2中,根据您的要求,它可能没有问题。