defusedxml does not work with `rich` library to print exceptions
Hello!
When using defused xml with `rich` traceback formatter the library always throws a weird error complaining about the type of exception. Everything is ok when using `from xml.etree.ElementTree import Element`.
```python
import io
import defusedxml.ElementTree as xmlctree
import structlog
rich_tracebacks_fmt = structlog.dev.RichTracebackFormatter()
structlog.configure(
cache_logger_on_first_use=True,
processors=[
# show log level
structlog.stdlib.add_log_level,
# add time to every log entry
structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M.%S"),
# render logs in pretty format (unstructured) + beautiful tracebacks
structlog.dev.ConsoleRenderer(exception_formatter=rich_tracebacks_fmt),
],
)
logger = structlog.get_logger()
try:
for _, elem in xmlctree.iterparse(io.BytesIO(b"sdsds")):
print(elem)
except Exception as e:
logger.exception(str(e))
```
traceback
```
> python feed_loader/test.py
Traceback (most recent call last):
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/xml/etree/ElementTree.py", line 1716, in close
self.parser.Parse(b"", True) # end of data
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
xml.parsers.expat.ExpatError: syntax error: line 1, column 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/feed_loader/test.py", line 24, in <module>
for _, elem in xmlctree.iterparse(io.BytesIO(b"sdsds")):
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/xml/etree/ElementTree.py", line 1255, in iterator
root = pullparser._close_and_return_root()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/xml/etree/ElementTree.py", line 1298, in _close_and_return_root
root = self._parser.close()
^^^^^^^^^^^^^^^^^^^^
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/xml/etree/ElementTree.py", line 1718, in close
self._raiseerror(v)
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/xml/etree/ElementTree.py", line 1618, in _raiseerror
raise err
xml.etree.ElementTree.ParseError: syntax error: line 1, column 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/feed_loader/test.py", line 27, in <module>
logger.exception(str(e))
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/structlog/_log_levels.py", line 88, in exception
return self.error(event, *args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/structlog/_log_levels.py", line 168, in meth
return self._proxy_to_logger(name, event, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/structlog/_base.py", line 222, in _proxy_to_logger
args, kw = self._process_event(method_name, event, event_kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/structlog/_base.py", line 171, in _process_event
event_dict = proc(self._logger, method_name, event_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/structlog/dev.py", line 505, in __call__
self._exception_formatter(sio, exc_info)
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/structlog/dev.py", line 217, in __call__
Console(file=sio, color_system=self.color_system).print(
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/rich/console.py", line 1700, in print
extend(render(renderable, render_options))
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/rich/console.py", line 1332, in render
for render_output in iter_render:
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/rich/traceback.py", line 545, in __rich_console__
highlighter(stack.syntax_error.msg),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/yauhensobaleu/Documents/backend.nosync/import/import-feed-loader/.venv/lib/python3.11/site-packages/rich/highlighter.py", line 37, in __call__
raise TypeError(f"str or Text instance required, not {text!r}")
```
0 条评论