diff -r 4b11f20ea549 Lib/test/test_traceback.py --- a/Lib/test/test_traceback.py Fri Sep 18 10:09:06 2015 +0300 +++ b/Lib/test/test_traceback.py Fri Sep 18 10:22:34 2015 +0300 @@ -640,7 +640,7 @@ class MiscTracebackCases(unittest.TestCa return traceback.extract_stack() result = extract() lineno = extract.__code__.co_firstlineno - self.assertEqual([tuple(x) for x in result[-2:]], [ + self.assertEqual(result[-2:], [ (__file__, lineno+2, 'test_extract_stack', 'result = extract()'), (__file__, lineno+1, 'extract', 'return traceback.extract_stack()'), ]) @@ -652,9 +652,13 @@ class TestFrame(unittest.TestCase): linecache.clearcache() linecache.lazycache("f", globals()) f = traceback.FrameSummary("f", 1, "dummy") - self.assertEqual( - ("f", 1, "dummy", '"""Test cases for traceback module"""'), - tuple(f)) + self.assertEqual(f, + ("f", 1, "dummy", '"""Test cases for traceback module"""')) + self.assertEqual(tuple(f), + ("f", 1, "dummy", '"""Test cases for traceback module"""')) + self.assertEqual(f, traceback.FrameSummary("f", 1, "dummy")) + self.assertEqual(f, tuple(f)) + self.assertEqual(tuple(f), f) self.assertEqual(None, f.locals) def test_lazy_lines(self): diff -r 4b11f20ea549 Lib/traceback.py --- a/Lib/traceback.py Fri Sep 18 10:09:06 2015 +0300 +++ b/Lib/traceback.py Fri Sep 18 10:22:34 2015 +0300 @@ -257,10 +257,14 @@ class FrameSummary: dict((k, repr(v)) for k, v in locals.items()) if locals else None def __eq__(self, other): - return (self.filename == other.filename and - self.lineno == other.lineno and - self.name == other.name and - self.locals == other.locals) + if isinstance(other, FrameSummary): + return (self.filename == other.filename and + self.lineno == other.lineno and + self.name == other.name and + self.locals == other.locals) + if isinstance(other, tuple): + return (self.filename, self.lineno, self.name, self.line) == other + return NotImplemented def __getitem__(self, pos): return (self.filename, self.lineno, self.name, self.line)[pos]