[issue36695] Change (regression?) in v3.8.0a3 doctest output after capturing the stderr output from a raised warning

Brian Skinn report at bugs.python.org
Mon Apr 22 09:52:59 EDT 2019


Brian Skinn <bskinn at alum.mit.edu> added the comment:

Here is warn.py, a minimal no-dependency repro script:

```
import doctest

class Tester:
    r"""Provide docstring for testing.

    >>> import warnings
    >>> from contextlib import redirect_stderr
    >>> from io import StringIO
    >>> sio = StringIO()
    >>> with redirect_stderr(sio):
    ...     warnings.warn("Warning 'containing' single quotes")
    >>> sio.getvalue()
    "...UserWarning: Warning 'containing' single quotes\n..."

    """


doctest.run_docstring_examples(
    Tester(),
    {},
    optionflags=doctest.ELLIPSIS,
)
```

`python3.7 warn.py` (3.7.3) gives no output.

`python3.8 warn.py` (3.8.0a3) gives:

```
$ python3.8 warn.py
****************************************************************
File "warn.py", line ?, in NoName
Failed example:
    sio.getvalue()
Expected:
    "...UserWarning: Warning 'containing' single quotes\n..."
Got:
    '<doctest NoName[4]>:2: UserWarning: Warning \'containing\' single quotes\n  warnings.warn("Warning \'containing\' single quotes")\n'
```

The problem appears to be centered around *doctest*, as the following script DOES NOT raise AssertionError with either of 3.7 or 3.8:

```
import warnings
from contextlib import redirect_stderr
from io import StringIO

sio = StringIO()

with redirect_stderr(sio):
    warnings.warn("Warning 'containing' single quotes")

assert " 'containing' " in sio.getvalue()
```

----------

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue36695>
_______________________________________


More information about the Python-bugs-list mailing list