Message361523
| Author |
vstinner |
| Recipients |
nascheme, vstinner |
| Date |
2020年02月07日.01:02:13 |
| SpamBayes Score |
-1.0 |
| Marked as misclassified |
Yes |
| Message-id |
<1581037334.38.0.585577914442.issue39573@roundup.psfhosted.org> |
| In-reply-to |
| Content |
Py_TYPE() is commonly used to render the type name in an error message. Example:
PyErr_Format(PyExc_TypeError,
"cannot convert '%.200s' object to bytearray",
Py_TYPE(arg)->tp_name);
This code has multiple issues:
* It truncates type name to 200 characters: there is no Python exception, not even a marker to indicate that the string has been truncated
* It's only the short name: the qualified name (tp_qualname) would be more helpful. The best would be to generate the fully qualified name: module + qualname.
* Py_TYPE() returns a borrowed reference which is causing multiple issues: https://pythoncapi.readthedocs.io/bad_api.html#borrowed-references
In September 2018, I created bpo-34595: "PyUnicode_FromFormat(): add %T format for an object type name". But there was disagreement, so I rejected my change.
I started "bpo-34595: How to format a type name?" thread on python-dev:
* https://mail.python.org/archives/list/python-dev@python.org/thread/HKYUMTVHNBVB5LJNRMZ7TPUQKGKAERCJ/#3UAMHYG6UF4MPLXBZORHO4JVKUBRUZ53
I didn't continue this work (until now), since it wasn't my priority. |
|
History
|
|---|
| Date |
User |
Action |
Args |
| 2020年02月07日 01:02:14 | vstinner | set | recipients:
+ vstinner, nascheme |
| 2020年02月07日 01:02:14 | vstinner | set | messageid: <1581037334.38.0.585577914442.issue39573@roundup.psfhosted.org> |
| 2020年02月07日 01:02:14 | vstinner | link | issue39573 messages |
| 2020年02月07日 01:02:13 | vstinner | create |
|