mirror of
https://github.com/python/cpython.git
synced 2025-07-19 01:05:26 +00:00
[3.8] bpo-37994: Fix silencing all errors if an attribute lookup fails. (GH-15630) (GH-15635)
Only AttributeError should be silenced.
(cherry picked from commit 41c57b3353
)
This commit is contained in:
parent
6922b9e4fc
commit
353053d9ad
14 changed files with 133 additions and 126 deletions
|
@ -201,16 +201,12 @@ PySys_Audit(const char *event, const char *argFormat, ...)
|
|||
ts->tracing++;
|
||||
ts->use_tracing = 0;
|
||||
while ((hook = PyIter_Next(hooks)) != NULL) {
|
||||
_Py_IDENTIFIER(__cantrace__);
|
||||
PyObject *o;
|
||||
int canTrace = -1;
|
||||
o = PyObject_GetAttrString(hook, "__cantrace__");
|
||||
int canTrace = _PyObject_LookupAttrId(hook, &PyId___cantrace__, &o);
|
||||
if (o) {
|
||||
canTrace = PyObject_IsTrue(o);
|
||||
Py_DECREF(o);
|
||||
} else if (PyErr_Occurred() &&
|
||||
PyErr_ExceptionMatches(PyExc_AttributeError)) {
|
||||
PyErr_Clear();
|
||||
canTrace = 0;
|
||||
}
|
||||
if (canTrace < 0) {
|
||||
break;
|
||||
|
@ -538,7 +534,10 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o)
|
|||
if (encoded == NULL)
|
||||
goto error;
|
||||
|
||||
buffer = _PyObject_GetAttrId(outf, &PyId_buffer);
|
||||
if (_PyObject_LookupAttrId(outf, &PyId_buffer, &buffer) < 0) {
|
||||
Py_DECREF(encoded);
|
||||
goto error;
|
||||
}
|
||||
if (buffer) {
|
||||
result = _PyObject_CallMethodIdObjArgs(buffer, &PyId_write, encoded, NULL);
|
||||
Py_DECREF(buffer);
|
||||
|
@ -548,7 +547,6 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o)
|
|||
Py_DECREF(result);
|
||||
}
|
||||
else {
|
||||
PyErr_Clear();
|
||||
escaped_str = PyUnicode_FromEncodedObject(encoded,
|
||||
stdout_encoding_str,
|
||||
"strict");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue