Skip to content

Commit d30f190

Browse files
authored
Merge pull request #20420 from charris/backport-20204
BUG: Clear errors correctly in F2PY conversions
2 parents fc9b124 + 419cbc1 commit d30f190

File tree

1 file changed

+40
-19
lines changed

1 file changed

+40
-19
lines changed

numpy/f2py/cfuncs.py

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -845,20 +845,26 @@
845845
return !(*v == -1 && PyErr_Occurred());
846846
}
847847
848-
if (PyComplex_Check(obj))
848+
if (PyComplex_Check(obj)) {
849+
PyErr_Clear();
849850
tmp = PyObject_GetAttrString(obj,\"real\");
850-
else if (PyBytes_Check(obj) || PyUnicode_Check(obj))
851+
}
852+
else if (PyBytes_Check(obj) || PyUnicode_Check(obj)) {
851853
/*pass*/;
852-
else if (PySequence_Check(obj))
854+
}
855+
else if (PySequence_Check(obj)) {
856+
PyErr_Clear();
853857
tmp = PySequence_GetItem(obj, 0);
858+
}
859+
854860
if (tmp) {
855-
PyErr_Clear();
856861
if (int_from_pyobj(v, tmp, errmess)) {
857862
Py_DECREF(tmp);
858863
return 1;
859864
}
860865
Py_DECREF(tmp);
861866
}
867+
862868
{
863869
PyObject* err = PyErr_Occurred();
864870
if (err == NULL) {
@@ -888,15 +894,19 @@
888894
return !(*v == -1 && PyErr_Occurred());
889895
}
890896
891-
if (PyComplex_Check(obj))
897+
if (PyComplex_Check(obj)) {
898+
PyErr_Clear();
892899
tmp = PyObject_GetAttrString(obj,\"real\");
893-
else if (PyBytes_Check(obj) || PyUnicode_Check(obj))
900+
}
901+
else if (PyBytes_Check(obj) || PyUnicode_Check(obj)) {
894902
/*pass*/;
895-
else if (PySequence_Check(obj))
896-
tmp = PySequence_GetItem(obj,0);
903+
}
904+
else if (PySequence_Check(obj)) {
905+
PyErr_Clear();
906+
tmp = PySequence_GetItem(obj, 0);
907+
}
897908
898909
if (tmp) {
899-
PyErr_Clear();
900910
if (long_from_pyobj(v, tmp, errmess)) {
901911
Py_DECREF(tmp);
902912
return 1;
@@ -934,14 +944,19 @@
934944
return !(*v == -1 && PyErr_Occurred());
935945
}
936946
937-
if (PyComplex_Check(obj))
947+
if (PyComplex_Check(obj)) {
948+
PyErr_Clear();
938949
tmp = PyObject_GetAttrString(obj,\"real\");
939-
else if (PyBytes_Check(obj) || PyUnicode_Check(obj))
950+
}
951+
else if (PyBytes_Check(obj) || PyUnicode_Check(obj)) {
940952
/*pass*/;
941-
else if (PySequence_Check(obj))
942-
tmp = PySequence_GetItem(obj,0);
943-
if (tmp) {
953+
}
954+
else if (PySequence_Check(obj)) {
944955
PyErr_Clear();
956+
tmp = PySequence_GetItem(obj, 0);
957+
}
958+
959+
if (tmp) {
945960
if (long_long_from_pyobj(v, tmp, errmess)) {
946961
Py_DECREF(tmp);
947962
return 1;
@@ -1001,14 +1016,20 @@
10011016
Py_DECREF(tmp);
10021017
return !(*v == -1.0 && PyErr_Occurred());
10031018
}
1004-
if (PyComplex_Check(obj))
1019+
1020+
if (PyComplex_Check(obj)) {
1021+
PyErr_Clear();
10051022
tmp = PyObject_GetAttrString(obj,\"real\");
1006-
else if (PyBytes_Check(obj) || PyUnicode_Check(obj))
1023+
}
1024+
else if (PyBytes_Check(obj) || PyUnicode_Check(obj)) {
10071025
/*pass*/;
1008-
else if (PySequence_Check(obj))
1009-
tmp = PySequence_GetItem(obj,0);
1010-
if (tmp) {
1026+
}
1027+
else if (PySequence_Check(obj)) {
10111028
PyErr_Clear();
1029+
tmp = PySequence_GetItem(obj, 0);
1030+
}
1031+
1032+
if (tmp) {
10121033
if (double_from_pyobj(v,tmp,errmess)) {Py_DECREF(tmp); return 1;}
10131034
Py_DECREF(tmp);
10141035
}

0 commit comments

Comments
 (0)