asleep-cult <asleep.c...@gmail.com> added the comment:

I did test it with a simple recursive function but a more realistic test 
confirms that its not just __getattribute__ (which makes sense)

import asyncio

class Test(Exception):
    ...

def x():
    raise Test('Hello World!')

def bar():
    try:
        x()
    except Test as e:
        try:
            bar()
        except Test as e:
            raise e

async def foo():
    bar()

loop = asyncio.get_event_loop()
loop.create_task(foo())
loop.run_forever()

Traceback:

Exception in default exception handler
Traceback (most recent call last):
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py",
 line 1733, in call_exception_handler    self.default_exception_handler(context)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py",
 line 1707, in default_exception_handler
    logger.error('\n'.join(log_lines), exc_info=exc_info)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\logging\__init__.py", 
line 1471, in error
    self._log(ERROR, msg, args, **kwargs)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\logging\__init__.py", 
line 1585, in _log
    self.handle(record)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\logging\__init__.py", 
line 1595, in handle
    self.callHandlers(record)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\logging\__init__.py", 
line 1665, in callHandlers
    lastResort.handle(record)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\logging\__init__.py", 
line 950, in handle
    self.emit(record)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\logging\__init__.py", 
line 1081, in emit
    msg = self.format(record)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\logging\__init__.py", 
line 925, in format
    return fmt.format(record)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\logging\__init__.py", 
line 672, in format
    record.exc_text = self.formatException(record.exc_info)
  File 
"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\logging\__init__.py", 
line 622, in formatException
    traceback.print_exception(ei[0], ei[1], tb, None, sio)
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 103, in print_exception
    for line in TracebackException(
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 493, in __init__
    context = TracebackException(
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 493, in __init__
    context = TracebackException(
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 493, in __init__
    context = TracebackException(
  [Previous line repeated 488 more times]
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 476, in __init__
    _seen.add(id(exc_value))
RecursionError: maximum recursion depth exceeded while calling a Python object

The Test('Hello World') exception is suppressed entirely

try:
    bar()
except:
    traceback.print_exc()

but when running it this way the traceback looks like this:

File "c:/Development/test/test.py", line 7, in x
    raise Test('Hello World!')
RecursionError: maximum recursion depth exceeded while calling a Python object

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:/Development/test/test.py", line 21, in <module>
    traceback.print_exc()
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 163, in print_exc
    print_exception(*sys.exc_info(), limit=limit, file=file, chain=chain)
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 103, in print_exception
    for line in TracebackException(
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 493, in __init__
    context = TracebackException(
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 493, in __init__
    context = TracebackException(
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\traceback.py", 
line 493, in __init__
    context = TracebackException(
  [Previous line repeated 495 more times]
RecursionError: maximum recursion depth exceeded

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue42848>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to