如何断言运算符 < 和 >= 未实现?

How to assert operators < and >= are not implemented?

最初我没有使用 unittest 框架,所以为了测试相同 class 的两个对象不能使用运算符 <>= 进行比较,我做了类似的事情:

try:
    o1 < o2
    assert False
except TypeError:
    pass

不过在那之后,我决定开始使用 unittest 模块,所以我将我的测试转换为使用相同模块编写测试的方式。

我试图通过以下方式完成与上面相同的事情:

self.assertRaises(TypeError, o1 < o2)

但这并不完全有效,因为 o1 < o2 试图调用运算符 <,而不是作为对函数的引用,函数应该作为测试的一部分被调用。

有没有一种方法可以在不需要将 o1 < o2 包装在函数中的情况下完成我所需要的?

使用 assertRaises 作为上下文管理器:

with self.assertRaises(TypeError):
    o1 < o2

Here is an explanation of the with statement. Here 是文档。 TL;DR:它允许执行带有 "context" 的代码块,即要设置和处置的东西 before/after 执行、错误处理等

assertRaises 的情况下,它的上下文管理器通过检查传递给它的 __exit__ 方法的 exc 参数来简单地检查是否已引发所需类型的异常。