Skip to content

doctest fails to compare tracebacks with notes #111159

Closed

Description

@sobolevn

Bug report

Minimal reproducer:

"""
Module doctest

>>> raise_with_note()
Traceback (most recent call last):
  ...
ValueError: Text
Note
"""

def raise_with_note():
    err = ValueError('Text')
    err.add_note('Note')
    raise err

Now, run it, you will get a very strange error:

» ./python.exe -m doctest ex.py
**********************************************************************
File "/Users/sobolev/Desktop/cpython/ex.py", line 4, in ex
Failed example:
    raise_with_note()
Expected:
    Traceback (most recent call last):
      ...
    ValueError: Text
    Note
Got:
    Traceback (most recent call last):
      File "/Users/sobolev/Desktop/cpython/Lib/doctest.py", line 1374, in __run
        exec(compile(example.source, filename, "single",
      File "<doctest ex[0]>", line 1, in <module>
        raise_with_note()
      File "/Users/sobolev/Desktop/cpython/ex.py", line 14, in raise_with_note
        raise err
    ValueError: Text
    Note
**********************************************************************
1 items had failures:
   1 of   1 in ex
***Test Failed*** 1 failures.

Things that do not help:

  • IGNORE_EXCEPTION_DETAIL
  • ELLIPSIS
  • Coping the whole traceback

Related to how exceptions with notes are represented in

exc_msg = traceback.format_exception_only(*exception[:2])[-1]

I am working on this issue right now :)

Refs #111157

Linked PRs

Activity

  1. added
    type-bugAn unexpected behavior, bug, or error
    stdlibStandard Library Python modules in the Lib/ directory
    on Oct 21, 2023
  2. self-assigned this
    on Oct 21, 2023
  3. added 2 commits that reference this issue on Oct 21, 2023
  4. added a commit that references this issue on Oct 21, 2023
  5. added 2 commits that reference this issue on Oct 21, 2023
  6. added 2 commits that reference this issue on Oct 21, 2023
  7. scoder commented on Oct 31, 2023

    @scoder
    Contributor

    With this change in place, I now get a (reproducible) doctest failure in lxml that seems rather random:
    https://github.com/lxml/lxml/blob/7356acba91bcf37b2c1c6ab5b7c9e37a4f1145b9/doc/xpathxslt.txt

    Doctest: xpathxslt.txt ... 
    ======================================================================
    ERROR: txt (xpathxslt)
    Doctest: xpathxslt.txt
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/opt/python3.13/lib/python3.13/unittest/case.py", line 58, in testPartExecutor
        yield
      File "/opt/python3.13/lib/python3.13/unittest/case.py", line 636, in run
        self._callTestMethod(testMethod)
      File "/opt/python3.13/lib/python3.13/unittest/case.py", line 589, in _callTestMethod
        if method() is not None:
           ^^^^^^^^
      File "/opt/python3.13/lib/python3.13/doctest.py", line 2257, in runTest
        failures, tries = runner.run(
                          ^^^^^^^^^^^
      File "/opt/python3.13/lib/python3.13/doctest.py", line 1537, in run
        return self.__run(test, compileflags, out)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/python3.13/lib/python3.13/doctest.py", line 1402, in __run
        exc_msg_index = next(
                        ^^^^^
    StopIteration
    

    I'm not using "notes" anywhere in the file (and wouldn't know what I'd use them for), so this breaks existing tests.

  8. reopened this on Oct 31, 2023
  9. sobolevn commented on Oct 31, 2023

    @sobolevn
    MemberAuthor

    Thanks, I will have a look!

  10. scoder commented on Oct 31, 2023

    @scoder
    Contributor

    I think the problem is with subclasses of SyntaxError. If they live in packages, the startswith() comparison in the newly added code can fail.

  11. added a commit that references this issue on Oct 31, 2023
  12. added a commit that references this issue on Nov 4, 2023
  13. added 2 commits that reference this issue on Nov 4, 2023
  14. added 2 commits that reference this issue on Nov 4, 2023
  15. hugovk commented on Nov 9, 2023

    @hugovk
    Member

    Anything left for this issue or can it be closed? Thanks!

  16. added 2 commits that reference this issue on Feb 11, 2024
  17. added 2 commits that reference this issue on Sep 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

stdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions