Skip to content

Test failures with Python 3.14.0a6 #13308

@hroncok

Description

@hroncok
$ python3.14 --version
Python 3.14.0a6
$ tox -e py314 -- -k 'test_issue_11872 or test_pastebin_http_error or test_raises_bdbquit_with_eoferror or test_unraisable' -v
...
.pkg: _optional_hooks> python /usr/lib/python3.13/site-packages/pyproject_api/_backend.py True setuptools.build_meta
.pkg: get_requires_for_build_sdist> python /usr/lib/python3.13/site-packages/pyproject_api/_backend.py True setuptools.build_meta
.pkg: get_requires_for_build_editable> python /usr/lib/python3.13/site-packages/pyproject_api/_backend.py True setuptools.build_meta
.pkg: build_sdist> python /usr/lib/python3.13/site-packages/pyproject_api/_backend.py True setuptools.build_meta
py314: install_package> /usr/bin/uv pip install --reinstall --no-deps pytest@.../pytest/.tox/.tmp/package/2/pytest-6.3.0.dev3354+g2b4098102.tar.gz
py314: commands[0]> pytest -k 'test_issue_11872 or test_pastebin_http_error or test_raises_bdbquit_with_eoferror or test_unraisable' -v
============================= test session starts ==============================
platform linux -- Python 3.14.0a6, pytest-6.3.0.dev3354+g2b4098102, pluggy-1.5.0 -- .../pytest/.tox/py314/bin/python3
cachedir: .tox/py314/.pytest_cache
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase(PosixPath('.../pytest/.hypothesis/examples'))
rootdir: .../pytest
configfile: pyproject.toml
testpaths: testing
plugins: hypothesis-6.129.4
collecting ... collected 3905 items / 3890 deselected / 15 selected

testing/python/raises.py::TestRaises::test_issue_11872 FAILED            [  6%]
testing/test_pastebin.py::TestPaste::test_pastebin_http_error FAILED     [ 13%]
testing/test_debugging.py::test_raises_bdbquit_with_eoferror FAILED      [ 20%]
testing/test_threadexception.py::test_unraisable_collection_failure PASSED [ 26%]
testing/test_unraisableexception.py::test_unraisable FAILED              [ 33%]
testing/test_unraisableexception.py::test_unraisable_in_setup FAILED     [ 40%]
testing/test_unraisableexception.py::test_unraisable_in_teardown FAILED  [ 46%]
testing/test_unraisableexception.py::test_unraisable_warning_error PASSED [ 53%]
testing/test_unraisableexception.py::test_unraisable_warning_multiple_errors PASSED [ 60%]
testing/test_unraisableexception.py::test_unraisable_collection_failure PASSED [ 66%]
testing/test_unraisableexception.py::test_refcycle_unraisable PASSED     [ 73%]
testing/test_unraisableexception.py::test_refcycle_unraisable_warning_filter PASSED [ 80%]
testing/test_unraisableexception.py::test_create_task_raises_unraisable_warning_filter PASSED [ 86%]
testing/test_unraisableexception.py::test_possibly_none_excinfo PASSED   [ 93%]
testing/test_unraisableexception.py::test_refcycle_unraisable_warning_filter_default PASSED [100%]

=================================== FAILURES ===================================
_________________________ TestRaises.test_issue_11872 __________________________

self = <tempfile._TemporaryFileCloser object at 0x7f9b85b55b50>

    def __del__(self):
        close_called = self.close_called
        self.cleanup()
        if not close_called:
>           _warnings.warn(self.warn_message, ResourceWarning)
E           ResourceWarning: Implicitly cleaning up <HTTPError 404: 'Not Found'>

/usr/lib64/python3.14/tempfile.py:483: ResourceWarning

The above exception was the direct cause of the following exception:

cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7f9b87605590>
when = 'call'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    @classmethod
    def from_call(
        cls,
        func: Callable[[], TResult],
        when: Literal["collect", "setup", "call", "teardown"],
        reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None,
    ) -> CallInfo[TResult]:
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :type func: Callable[[], _pytest.runner.TResult]
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: TResult | None = func()
                                     ^^^^^^

.tox/py314/lib64/python3.14/site-packages/_pytest/runner.py:345: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py314/lib64/python3.14/site-packages/_pytest/runner.py:246: in <lambda>
    lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/py314/lib64/python3.14/site-packages/pluggy/_hooks.py:513: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/py314/lib64/python3.14/site-packages/pluggy/_manager.py:120: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/py314/lib64/python3.14/site-packages/_pytest/logging.py:847: in pytest_runtest_call
    yield from self._runtest_for(item, "call")
.tox/py314/lib64/python3.14/site-packages/_pytest/logging.py:830: in _runtest_for
    yield
.tox/py314/lib64/python3.14/site-packages/_pytest/capture.py:900: in pytest_runtest_call
    return (yield)
            ^^^^^
.tox/py314/lib64/python3.14/site-packages/_pytest/skipping.py:263: in pytest_runtest_call
    return (yield)
            ^^^^^
.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:153: in pytest_runtest_call
    collect_unraisable(item.config)
.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:77: in collect_unraisable
    raise errors[0]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

config = <_pytest.config.Config object at 0x7f9b889b2a50>

    def collect_unraisable(config: Config) -> None:
        pop_unraisable = config.stash[unraisable_exceptions].pop
        errors: list[pytest.PytestUnraisableExceptionWarning | RuntimeError] = []
        meta = None
        hook_error = None
        try:
            while True:
                try:
                    meta = pop_unraisable()
                except IndexError:
                    break
    
                if isinstance(meta, BaseException):
                    hook_error = RuntimeError("Failed to process unraisable exception")
                    hook_error.__cause__ = meta
                    errors.append(hook_error)
                    continue
    
                msg = meta.msg
                try:
>                   warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
E                   pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function _TemporaryFileCloser.__del__ at 0x7f9b88bac460>: None

.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:65: PytestUnraisableExceptionWarning
______________________ TestPaste.test_pastebin_http_error ______________________

self = <tempfile._TemporaryFileCloser object at 0x7f9b859a3550>

    def __del__(self):
        close_called = self.close_called
        self.cleanup()
        if not close_called:
>           _warnings.warn(self.warn_message, ResourceWarning)
E           ResourceWarning: Implicitly cleaning up <HTTPError 400: 'Bad request'>

/usr/lib64/python3.14/tempfile.py:483: ResourceWarning

The above exception was the direct cause of the following exception:

cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7f9b8589d430>
when = 'call'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    @classmethod
    def from_call(
        cls,
        func: Callable[[], TResult],
        when: Literal["collect", "setup", "call", "teardown"],
        reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None,
    ) -> CallInfo[TResult]:
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :type func: Callable[[], _pytest.runner.TResult]
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: TResult | None = func()
                                     ^^^^^^

.tox/py314/lib64/python3.14/site-packages/_pytest/runner.py:345: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py314/lib64/python3.14/site-packages/_pytest/runner.py:246: in <lambda>
    lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/py314/lib64/python3.14/site-packages/pluggy/_hooks.py:513: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/py314/lib64/python3.14/site-packages/pluggy/_manager.py:120: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/py314/lib64/python3.14/site-packages/_pytest/logging.py:847: in pytest_runtest_call
    yield from self._runtest_for(item, "call")
.tox/py314/lib64/python3.14/site-packages/_pytest/logging.py:830: in _runtest_for
    yield
.tox/py314/lib64/python3.14/site-packages/_pytest/capture.py:900: in pytest_runtest_call
    return (yield)
            ^^^^^
.tox/py314/lib64/python3.14/site-packages/_pytest/skipping.py:263: in pytest_runtest_call
    return (yield)
            ^^^^^
.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:153: in pytest_runtest_call
    collect_unraisable(item.config)
.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:77: in collect_unraisable
    raise errors[0]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

config = <_pytest.config.Config object at 0x7f9b889b2a50>

    def collect_unraisable(config: Config) -> None:
        pop_unraisable = config.stash[unraisable_exceptions].pop
        errors: list[pytest.PytestUnraisableExceptionWarning | RuntimeError] = []
        meta = None
        hook_error = None
        try:
            while True:
                try:
                    meta = pop_unraisable()
                except IndexError:
                    break
    
                if isinstance(meta, BaseException):
                    hook_error = RuntimeError("Failed to process unraisable exception")
                    hook_error.__cause__ = meta
                    errors.append(hook_error)
                    continue
    
                msg = meta.msg
                try:
>                   warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
E                   pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function _TemporaryFileCloser.__del__ at 0x7f9b88bac460>: None

.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:65: PytestUnraisableExceptionWarning
______________________ test_raises_bdbquit_with_eoferror _______________________

pytester = <Pytester PosixPath('/tmp/pytest-of-.../pytest-26/test_raises_bdbquit_with_eoferror0')>

    def test_raises_bdbquit_with_eoferror(pytester: Pytester) -> None:
        """It is not guaranteed that DontReadFromInput's read is called."""
        p1 = pytester.makepyfile(
            """
            def input_without_read(*args, **kwargs):
                raise EOFError()
    
            def test(monkeypatch):
                import builtins
                monkeypatch.setattr(builtins, "input", input_without_read)
                __import__('pdb').set_trace()
            """
        )
        result = pytester.runpytest(str(p1))
>       result.stdout.fnmatch_lines(["E *BdbQuit", "*= 1 failed in*"])
E       Failed: nomatch: 'E *BdbQuit'
E           and: '============================= test session starts =============================='
E           and: 'platform linux -- Python 3.14.0a6, pytest-6.3.0.dev3354+g2b4098102, pluggy-1.5.0'
E           and: 'rootdir: /tmp/pytest-of-.../pytest-26/test_raises_bdbquit_with_eoferror0'
E           and: 'collected 1 item'
E           and: ''
E           and: 'test_raises_bdbquit_with_eoferror.py '
E           and: '>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>'
E           and: '> /tmp/pytest-of-.../pytest-26/test_raises_bdbquit_with_eoferror0/test_raises_bdbquit_with_eoferror.py(7)test()'
E           and: "-> __import__('pdb').set_trace()"
E           and: ''
E           and: ''
E           and: ''
E           and: '!!!!!!!!!!!!!!!!!!! _pytest.outcomes.Exit: Quitting debugger !!!!!!!!!!!!!!!!!!!'
E           and: '============================ no tests ran in 0.50s ============================='
E       remains unmatched: 'E *BdbQuit'

.../pytest/testing/test_debugging.py:1390: Failed
----------------------------- Captured stdout call -----------------------------
============================= test session starts ==============================
platform linux -- Python 3.14.0a6, pytest-6.3.0.dev3354+g2b4098102, pluggy-1.5.0
rootdir: /tmp/pytest-of-.../pytest-26/test_raises_bdbquit_with_eoferror0
collected 1 item

test_raises_bdbquit_with_eoferror.py 
>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>
> /tmp/pytest-of-.../pytest-26/test_raises_bdbquit_with_eoferror0/test_raises_bdbquit_with_eoferror.py(7)test()
-> __import__('pdb').set_trace()



!!!!!!!!!!!!!!!!!!! _pytest.outcomes.Exit: Quitting debugger !!!!!!!!!!!!!!!!!!!
============================ no tests ran in 0.50s =============================
_______________________________ test_unraisable ________________________________

pytester = <Pytester PosixPath('/tmp/pytest-of-.../pytest-26/test_unraisable0')>

    @pytest.mark.skipif(PYPY, reason="garbage-collection differences make this flaky")
    @pytest.mark.filterwarnings("default::pytest.PytestUnraisableExceptionWarning")
    def test_unraisable(pytester: Pytester) -> None:
        pytester.makepyfile(
            test_it="""
            class BrokenDel:
                def __del__(self):
                    raise ValueError("del is broken")
    
            def test_it():
                obj = BrokenDel()
                del obj
    
            def test_2(): pass
            """
        )
        result = pytester.runpytest()
        assert result.ret == 0
        result.assert_outcomes(passed=2, warnings=1)
>       result.stdout.fnmatch_lines(
            [
                "*= warnings summary =*",
                "test_it.py::test_it",
                "  * PytestUnraisableExceptionWarning: Exception ignored in: <function BrokenDel.__del__ at *>",
                "  ",
                "  Traceback (most recent call last):",
                "  ValueError: del is broken",
                "  ",
                "  Enable tracemalloc to get traceback where the object was allocated.",
                "  See https* for more info.",
                "    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))",
            ]
        )
E       Failed: nomatch: '*= warnings summary =*'
E           and: '============================= test session starts =============================='
E           and: 'platform linux -- Python 3.14.0a6, pytest-6.3.0.dev3354+g2b4098102, pluggy-1.5.0'
E           and: 'rootdir: /tmp/pytest-of-.../pytest-26/test_unraisable0'
E           and: 'collected 2 items'
E           and: ''
E           and: 'test_it.py ..                                                            [100%]'
E           and: ''
E       fnmatch: '*= warnings summary =*'
E          with: '=============================== warnings summary ==============================='
E       exact match: 'test_it.py::test_it'
E       nomatch: '  * PytestUnraisableExceptionWarning: Exception ignored in: <function BrokenDel.__del__ at *>'
E           and: '  .../pytest/.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:65: PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function BrokenDel.__del__ at 0x7f9b853c0a90>: None'
E           and: '  '
E           and: '  Traceback (most recent call last):'
E           and: '    File "/tmp/pytest-of-.../pytest-26/test_unraisable0/test_it.py", line 3, in __del__'
E           and: '      raise ValueError("del is broken")'
E           and: '  ValueError: del is broken'
E           and: '  '
E           and: '  '
E           and: '    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))'
E           and: ''
E           and: '-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html'
E           and: '========================= 2 passed, 1 warning in 0.01s ========================='
E       remains unmatched: '  * PytestUnraisableExceptionWarning: Exception ignored in: <function BrokenDel.__del__ at *>'

.../pytest/testing/test_unraisableexception.py:35: Failed
----------------------------- Captured stdout call -----------------------------
============================= test session starts ==============================
platform linux -- Python 3.14.0a6, pytest-6.3.0.dev3354+g2b4098102, pluggy-1.5.0
rootdir: /tmp/pytest-of-.../pytest-26/test_unraisable0
collected 2 items

test_it.py ..                                                            [100%]

=============================== warnings summary ===============================
test_it.py::test_it
  .../pytest/.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:65: PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function BrokenDel.__del__ at 0x7f9b853c0a90>: None
  
  Traceback (most recent call last):
    File "/tmp/pytest-of-.../pytest-26/test_unraisable0/test_it.py", line 3, in __del__
      raise ValueError("del is broken")
  ValueError: del is broken
  
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========================= 2 passed, 1 warning in 0.01s =========================
___________________________ test_unraisable_in_setup ___________________________

pytester = <Pytester PosixPath('/tmp/pytest-of-.../pytest-26/test_unraisable_in_setup0')>

    @pytest.mark.skipif(PYPY, reason="garbage-collection differences make this flaky")
    @pytest.mark.filterwarnings("default::pytest.PytestUnraisableExceptionWarning")
    def test_unraisable_in_setup(pytester: Pytester) -> None:
        pytester.makepyfile(
            test_it="""
            import pytest
    
            class BrokenDel:
                def __del__(self):
                    raise ValueError("del is broken")
    
            @pytest.fixture
            def broken_del():
                obj = BrokenDel()
                del obj
    
            def test_it(broken_del): pass
            def test_2(): pass
            """
        )
        result = pytester.runpytest()
        assert result.ret == 0
        result.assert_outcomes(passed=2, warnings=1)
>       result.stdout.fnmatch_lines(
            [
                "*= warnings summary =*",
                "test_it.py::test_it",
                "  * PytestUnraisableExceptionWarning: Exception ignored in: <function BrokenDel.__del__ at *>",
                "  ",
                "  Traceback (most recent call last):",
                "  ValueError: del is broken",
                "  ",
                "  Enable tracemalloc to get traceback where the object was allocated.",
                "  See https* for more info.",
                "    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))",
            ]
        )
E       Failed: nomatch: '*= warnings summary =*'
E           and: '============================= test session starts =============================='
E           and: 'platform linux -- Python 3.14.0a6, pytest-6.3.0.dev3354+g2b4098102, pluggy-1.5.0'
E           and: 'rootdir: /tmp/pytest-of-.../pytest-26/test_unraisable_in_setup0'
E           and: 'collected 2 items'
E           and: ''
E           and: 'test_it.py ..                                                            [100%]'
E           and: ''
E       fnmatch: '*= warnings summary =*'
E          with: '=============================== warnings summary ==============================='
E       exact match: 'test_it.py::test_it'
E       nomatch: '  * PytestUnraisableExceptionWarning: Exception ignored in: <function BrokenDel.__del__ at *>'
E           and: '  .../pytest/.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:65: PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function BrokenDel.__del__ at 0x7f9b85430300>: None'
E           and: '  '
E           and: '  Traceback (most recent call last):'
E           and: '    File "/tmp/pytest-of-.../pytest-26/test_unraisable_in_setup0/test_it.py", line 5, in __del__'
E           and: '      raise ValueError("del is broken")'
E           and: '  ValueError: del is broken'
E           and: '  '
E           and: '  '
E           and: '    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))'
E           and: ''
E           and: '-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html'
E           and: '========================= 2 passed, 1 warning in 0.01s ========================='
E       remains unmatched: '  * PytestUnraisableExceptionWarning: Exception ignored in: <function BrokenDel.__del__ at *>'

.../pytest/testing/test_unraisableexception.py:74: Failed
----------------------------- Captured stdout call -----------------------------
============================= test session starts ==============================
platform linux -- Python 3.14.0a6, pytest-6.3.0.dev3354+g2b4098102, pluggy-1.5.0
rootdir: /tmp/pytest-of-.../pytest-26/test_unraisable_in_setup0
collected 2 items

test_it.py ..                                                            [100%]

=============================== warnings summary ===============================
test_it.py::test_it
  .../pytest/.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:65: PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function BrokenDel.__del__ at 0x7f9b85430300>: None
  
  Traceback (most recent call last):
    File "/tmp/pytest-of-.../pytest-26/test_unraisable_in_setup0/test_it.py", line 5, in __del__
      raise ValueError("del is broken")
  ValueError: del is broken
  
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========================= 2 passed, 1 warning in 0.01s =========================
_________________________ test_unraisable_in_teardown __________________________

pytester = <Pytester PosixPath('/tmp/pytest-of-.../pytest-26/test_unraisable_in_teardown0')>

    @pytest.mark.skipif(PYPY, reason="garbage-collection differences make this flaky")
    @pytest.mark.filterwarnings("default::pytest.PytestUnraisableExceptionWarning")
    def test_unraisable_in_teardown(pytester: Pytester) -> None:
        pytester.makepyfile(
            test_it="""
            import pytest
    
            class BrokenDel:
                def __del__(self):
                    raise ValueError("del is broken")
    
            @pytest.fixture
            def broken_del():
                yield
                obj = BrokenDel()
                del obj
    
            def test_it(broken_del): pass
            def test_2(): pass
            """
        )
        result = pytester.runpytest()
        assert result.ret == 0
        result.assert_outcomes(passed=2, warnings=1)
>       result.stdout.fnmatch_lines(
            [
                "*= warnings summary =*",
                "test_it.py::test_it",
                "  * PytestUnraisableExceptionWarning: Exception ignored in: <function BrokenDel.__del__ at *>",
                "  ",
                "  Traceback (most recent call last):",
                "  ValueError: del is broken",
                "  ",
                "  Enable tracemalloc to get traceback where the object was allocated.",
                "  See https* for more info.",
                "    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))",
            ]
        )
E       Failed: nomatch: '*= warnings summary =*'
E           and: '============================= test session starts =============================='
E           and: 'platform linux -- Python 3.14.0a6, pytest-6.3.0.dev3354+g2b4098102, pluggy-1.5.0'
E           and: 'rootdir: /tmp/pytest-of-.../pytest-26/test_unraisable_in_teardown0'
E           and: 'collected 2 items'
E           and: ''
E           and: 'test_it.py ..                                                            [100%]'
E           and: ''
E       fnmatch: '*= warnings summary =*'
E          with: '=============================== warnings summary ==============================='
E       exact match: 'test_it.py::test_it'
E       nomatch: '  * PytestUnraisableExceptionWarning: Exception ignored in: <function BrokenDel.__del__ at *>'
E           and: '  .../pytest/.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:65: PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function BrokenDel.__del__ at 0x7f9b85434880>: None'
E           and: '  '
E           and: '  Traceback (most recent call last):'
E           and: '    File "/tmp/pytest-of-.../pytest-26/test_unraisable_in_teardown0/test_it.py", line 5, in __del__'
E           and: '      raise ValueError("del is broken")'
E           and: '  ValueError: del is broken'
E           and: '  '
E           and: '  '
E           and: '    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))'
E           and: ''
E           and: '-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html'
E           and: '========================= 2 passed, 1 warning in 0.01s ========================='
E       remains unmatched: '  * PytestUnraisableExceptionWarning: Exception ignored in: <function BrokenDel.__del__ at *>'

.../pytest/testing/test_unraisableexception.py:114: Failed
----------------------------- Captured stdout call -----------------------------
============================= test session starts ==============================
platform linux -- Python 3.14.0a6, pytest-6.3.0.dev3354+g2b4098102, pluggy-1.5.0
rootdir: /tmp/pytest-of-.../pytest-26/test_unraisable_in_teardown0
collected 2 items

test_it.py ..                                                            [100%]

=============================== warnings summary ===============================
test_it.py::test_it
  .../pytest/.tox/py314/lib64/python3.14/site-packages/_pytest/unraisableexception.py:65: PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function BrokenDel.__del__ at 0x7f9b85434880>: None
  
  Traceback (most recent call last):
    File "/tmp/pytest-of-.../pytest-26/test_unraisable_in_teardown0/test_it.py", line 5, in __del__
      raise ValueError("del is broken")
  ValueError: del is broken
  
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========================= 2 passed, 1 warning in 0.01s =========================
=========================== short test summary info ============================
FAILED testing/python/raises.py::TestRaises::test_issue_11872 - pytest.Pytest...
FAILED testing/test_pastebin.py::TestPaste::test_pastebin_http_error - pytest...
FAILED testing/test_debugging.py::test_raises_bdbquit_with_eoferror - Failed:...
FAILED testing/test_unraisableexception.py::test_unraisable - Failed: nomatch...
FAILED testing/test_unraisableexception.py::test_unraisable_in_setup - Failed...
FAILED testing/test_unraisableexception.py::test_unraisable_in_teardown - Fai...
================= 6 failed, 9 passed, 3890 deselected in 9.55s =================
py314: exit 1 (11.30 seconds) .../pytest> pytest -k 'test_issue_11872 or test_pastebin_http_error or test_raises_bdbquit_with_eoferror or test_unraisable' -v pid=3081635
  py314: FAIL code 1 (18.23=setup[6.93]+cmd[11.30] seconds)
  evaluation failed :( (18.31 seconds)

$ uv pip list
Using Python 3.14.0a6 environment at: .tox/py314
Package            Version
------------------ ------------------------
argcomplete        3.6.0
attrs              25.3.0
certifi            2025.1.31
charset-normalizer 3.4.1
elementpath        4.8.0
hypothesis         6.129.4
idna               3.10
iniconfig          2.0.0
mock               5.2.0
packaging          24.2
pluggy             1.5.0
pygments           2.19.1
pytest             6.3.0.dev3354+g2b4098102
requests           2.32.3
setuptools         76.1.0
sortedcontainers   2.4.0
urllib3            2.3.0
xmlschema          3.4.4

This is both the latest pytest 8.3.5 and main branch @ 2b40981.

Fedora Linux (41 and 43 both).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions