STINNER Victor added the comment:

pyerr_chain.patch: The real patch to chain automatically exceptions when using
PyErr_*() functions.

pyerr_match_clear-2.patch hides the original exception when it is useless, too
low level like OverflowError when casting to C types, etc.

Examples without pyerr_match_clear-2.patch.

int, before:

| $ python3 -c 'int("123z")'
| Traceback (most recent call last):
|   File "<string>", line 1, in <module>
| ValueError: invalid literal for int() with base 10: '123z'

int, after:

| $ ./python -c 'int("123z")'
| ValueError: invalid literal for int() with base 10: '123z'
|
| During handling of the above exception, another exception occurred:
|
| Traceback (most recent call last):
|   File "<string>", line 1, in <module>
| ValueError: invalid literal for int() with base 10: '123z'

struct, before:

| $ python3 -c 'import struct; struct.pack("b", 2**100)'
| Traceback (most recent call last):
|   File "<string>", line 1, in <module>
| struct.error: argument out of range

struct, after:

| $ ./python -c 'import struct; struct.pack("b", 2**100)'
| OverflowError: Python int too large to convert to C long
|
| During handling of the above exception, another exception occurred:
|
| Traceback (most recent call last):
|   File "<string>", line 1, in <module>
| struct.error: argument out of range


More examples, after (still without pyerr_match_clear-2.patch):

int(str):

| TypeError: a bytes-like object is required, not 'type'
|
| During handling of the above exception, another exception occurred:
|
| Traceback (most recent call last):
|   File "<stdin>", line 1, in <module>
| TypeError: int() argument must be a string, a bytes-like object or a number, 
not 'type'

''.join(str):

| TypeError: 'type' object is not iterable
|
| During handling of the above exception, another exception occurred:
|
| Traceback (most recent call last):
|   File "<stdin>", line 1, in <module>
| TypeError: can only join an iterable


b"%f" % "abc":

| TypeError: a float is required
|
| During handling of the above exception, another exception occurred:
|
| Traceback (most recent call last):
|   File "<stdin>", line 1, in <module>
| TypeError: float argument required, not str

----------
Added file: http://bugs.python.org/file38679/pyerr_chain.patch

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

Reply via email to