New issue 718: Failure to create representation with sets having "unsortable" elements https://bitbucket.org/pytest-dev/pytest/issue/718/failure-to-create-representation-with-sets
Edison Gustavo Muenz: I’m using Python 2.7.7 (The error also happens on Python 2.7.9) The following code fails: ```python def test_pretty_printer_screws_up_representation(): class UnsortableKey(object): def __init__(self, name): self.name = name def __lt__(self, other): raise RuntimeError() def __repr__(self): return self.name def __hash__(self): return hash(self.name) def __eq__(self, other): return self.name == other.name assert {UnsortableKey('1'), UnsortableKey('2')} == {UnsortableKey('2')} > assert {UnsortableKey('1'), UnsortableKey('2')} == {UnsortableKey('2')} E assert set([1, 2]) == set([2]) E (pytest_assertion plugin: representation of details failed. Probably an object has a faulty __repr__.) E X:\etk\coilib50\source\python\coilib50\_pytest\_tests\pytest_almost_equal.py:766: RuntimeError ``` While debugging, the problem happens in this [line](https://github.com/python/cpython/blob/2.7/Lib/pprint.py#L199) of pprint.py (The [PrettyPrinter module](https://docs.python.org/2/library/pprint.html)). It assumes that the “object” can have the method sorted() called on it, which is not always true. The `repr.py` module handles this correctly, but `pprint.py` doesn’t. This is the full [traceback](http://pastebin.com/t9a9amcR) (I printed it from the the `__lt__()` method). I think that this should be handled by `pprint.py`, however, it is tied to the python version being used. Maybe pytest could handle this as a workaround this limitation of `pprint.py`? Fixing it in `pprint.py` looks straightforward: just handle it like `repr.py` [does](https://hg.python.org/cpython/file/2.7/Lib/repr.py#l122), by using the `_possiblysorted()` method. _______________________________________________ pytest-commit mailing list pytest-commit@python.org https://mail.python.org/mailman/listinfo/pytest-commit