Исключение при печати исключения через logging.exception () - PullRequest
1 голос
/ 05 марта 2020

У меня есть блок try , который каждый раз вызывает исключение, в блоке , за исключением , который я использовал logging.exception('some message') для регистрации ошибок. Но при обработке вышеуказанного исключения произошло другое исключение.

    try:
        raise Exception('')
        #some key error exception raised.
    except Exception as e:
        abortMsg = "some error"
        logging.exception(abortMsg)
        return

Я уверен, что ошибка вызвана трассировкой стека исключения, любой связанной с ним операцией, такой как печать или использование traceback.print_exc() рекурсивно вызывает исключения

Журнал ошибок при использовании traceback.print_exc()

Журнал ошибок:

--- Logging error ---
Unhandled exception in thread started by <bound method Thread._bootstrap of <Thread(Thread-5, 
started 139762597885696)>>
Traceback (most recent call last):
File "somefile.py", line 570, in postProcess
reporter.write_report()
File "someotherfile.py", line 115, in write_report
File "someotherfile.py", line 295, in _addSectionResult
File "someotherfile.py", line 315, in _addCheckSummary
KeyError: 'message_zero'


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/somefile.py", line 310, in execute
  self.postProcess()
  File "/somefile.py", line 580, in postProcess
  s = str(traceback.print_exc())
  File "/usr/lib/python3.5/traceback.py", line 159, in print_exc
  print_exception(*sys.exc_info(), limit=limit, file=file, chain=chain)
  File "/usr/lib/python3.5/traceback.py", line 100, in print_exception
  type(value), value, tb, limit=limit).format(chain=chain):
  File "/usr/lib/python3.5/traceback.py", line 474, in __init__
  capture_locals=capture_locals)
  File "/usr/lib/python3.5/traceback.py", line 358, in extract
  f.line
  File "/usr/lib/python3.5/traceback.py", line 282, in line
  self._line = linecache.getline(self.filename, self.lineno).strip()
  File "/usr/lib/python3.5/linecache.py", line 16, in getline
lines = getlines(filename, module_globals)
 File "/usr/lib/python3.5/linecache.py", line 47, in getlines
return updatecache(filename, module_globals)
 File "/usr/lib/python3.5/linecache.py", line 137, in updatecache
lines = fp.readlines()
 File "/usr/lib/python3.5/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa3 in position 4: invalid start byte'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.5/logging/__init__.py", line 980, in emit
msg = self.format(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 830, in format
return fmt.format(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 575, in format
record.exc_text = self.formatException(record.exc_info)
  File "/usr/lib/python3.5/logging/__init__.py", line 525, in formatException
traceback.print_exception(ei[0], ei[1], tb, None, sio)
  File "/usr/lib/python3.5/traceback.py", line 100, in print_exception
type(value), value, tb, limit=limit).format(chain=chain):
  File "/usr/lib/python3.5/traceback.py", line 487, in __init__
self._load_lines()
  File "/usr/lib/python3.5/traceback.py", line 500, in _load_lines
self.__context__._load_lines()
  File "/usr/lib/python3.5/traceback.py", line 498, in _load_lines
frame.line
  File "/usr/lib/python3.5/traceback.py", line 282, in line
self._line = linecache.getline(self.filename, self.lineno).strip()
  File "/usr/lib/python3.5/linecache.py", line 16, in getline
lines = getlines(filename, module_globals)
  File "/usr/lib/python3.5/linecache.py", line 47, in getlines
return updatecache(filename, module_globals)
  File "/usr/lib/python3.5/linecache.py", line 137, in updatecache
lines = fp.readlines()
  File "/usr/lib/python3.5/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa3 in position 4: invalid start byte

Есть ли способ просмотреть и проанализировать трассировку стека, которая вызывает ошибка?

PS: я использую это внутри docker. Пока я запускаю этот файл локально, рекурсивное исключение не вызывается.

РЕДАКТИРОВАТЬ: Любое исключение, вызванное в любом месте кода, вызывает рекурсивное исключение (ошибка декодирования Юникода)

...