Nikita Sobolev <[email protected]> added the comment:
Couple of thoughts.
1. You have to create quite complex structural "clone" of `Exception` for
python-based `traceback`:
```python
def test_non_exception_subtype(self):
class RegularObject:
__traceback__ = None
__suppress_context__ = None
__cause__ = None
__context__ = None
def __call__(self):
return self # we need it for `get_exception` to work
obj = RegularObject()
try:
1 / 0
except Exception as ex:
obj.__traceback__ = ex.__traceback__
err = self.get_report(obj, force=True)
self.assertIn('1 / 0', err) # passes
```
Is it really worth it?
2. Removing `PyExceptionInstance_Check(value)` from
https://github.com/python/cpython/blob/main/Modules/_testcapimodule.c#L3508-L3511
does not really help that much, because we still need to call `PyErr_Display`
below. Which assumes `value` to be `Exception`.
There's no correct way of calling `print_exception()` directly as far as I
understand. It is only called in `print_exception_recursive`, which in its
order is called from:
- `print_chained` (called recursively from `print_exception_recursive`)
- `_PyErr_Display` -> `PyErrDisplay`
So, maybe instead we should change `print_exception` to not type check `value`
again?
Or we can cahnge some levels above. Like `PyErrDisplay`, it can return
`TypeError` earlier if case `value` is invalid.
What do you think? :)
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue45615>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com