loguru icon indicating copy to clipboard operation
loguru copied to clipboard

"ValueError: call stack is not deep enough" while using "atexit.register"

Open Delgan opened this issue 3 years ago • 1 comments

This one caught me with the following pattern:

import atexit
from loguru import logger


logger.info('Hi!')
atexit.register(logger.info, 'Bye!')

logger.info('Doing stuff...')
2022-07-06 11:50:55.989 | INFO     | __main__:<module>:6 - Hi!
2022-07-06 11:50:55.989 | INFO     | __main__:<module>:8 - Doing stuff...
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/home/hannes/work/repos/loguru/loguru/_logger.py", line 1974, in info
    __self._log("INFO", None, False, __self._options, __message, args, kwargs)
  File "/home/hannes/work/repos/loguru/loguru/_logger.py", line 1852, in _log
    frame = get_frame(depth + 2)
ValueError: call stack is not deep enough

Originally posted by @astromancer in https://github.com/Delgan/loguru/issues/88#issuecomment-1176028447

Delgan avatar Jul 07 '22 19:07 Delgan

Some personal guess: atexit.register are executed after the main module's execution, i.e. the __main__'s frame is no longer existent when logger.info('Bye!') is called. In this case, logger.info('Bye'!) does not have a previous frame.

xzmeng avatar Sep 06 '23 09:09 xzmeng