updated for version 7.3.907
Problem: Python uses IndexError when a dict key is not found.
Solution: Use KeyError instead. (ZyX)
diff --git a/src/if_py_both.h b/src/if_py_both.h
index f5617ac..cd80800 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -861,7 +861,7 @@
if (di == NULL)
{
- PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
+ PyErr_SetString(PyExc_KeyError, _("no such key in dictionary"));
return NULL;
}
diff --git a/src/if_python.c b/src/if_python.c
index 89cb033..0f90c99 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -348,12 +348,14 @@
/* Imported exception objects */
static PyObject *imp_PyExc_AttributeError;
static PyObject *imp_PyExc_IndexError;
+static PyObject *imp_PyExc_KeyError;
static PyObject *imp_PyExc_KeyboardInterrupt;
static PyObject *imp_PyExc_TypeError;
static PyObject *imp_PyExc_ValueError;
# define PyExc_AttributeError imp_PyExc_AttributeError
# define PyExc_IndexError imp_PyExc_IndexError
+# define PyExc_KeyError imp_PyExc_KeyError
# define PyExc_KeyboardInterrupt imp_PyExc_KeyboardInterrupt
# define PyExc_TypeError imp_PyExc_TypeError
# define PyExc_ValueError imp_PyExc_ValueError
@@ -579,11 +581,13 @@
PyObject *exdict = PyModule_GetDict(exmod);
imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError");
imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError");
+ imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError");
imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
Py_XINCREF(imp_PyExc_AttributeError);
Py_XINCREF(imp_PyExc_IndexError);
+ Py_XINCREF(imp_PyExc_KeyError);
Py_XINCREF(imp_PyExc_KeyboardInterrupt);
Py_XINCREF(imp_PyExc_TypeError);
Py_XINCREF(imp_PyExc_ValueError);
diff --git a/src/if_python3.c b/src/if_python3.c
index d8f7574..2a66cfa 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -327,12 +327,14 @@
/* Imported exception objects */
static PyObject *p3imp_PyExc_AttributeError;
static PyObject *p3imp_PyExc_IndexError;
+static PyObject *p3imp_PyExc_KeyError;
static PyObject *p3imp_PyExc_KeyboardInterrupt;
static PyObject *p3imp_PyExc_TypeError;
static PyObject *p3imp_PyExc_ValueError;
# define PyExc_AttributeError p3imp_PyExc_AttributeError
# define PyExc_IndexError p3imp_PyExc_IndexError
+# define PyExc_KeyError p3imp_PyExc_KeyError
# define PyExc_KeyboardInterrupt p3imp_PyExc_KeyboardInterrupt
# define PyExc_TypeError p3imp_PyExc_TypeError
# define PyExc_ValueError p3imp_PyExc_ValueError
@@ -567,11 +569,13 @@
PyObject *exdict = PyModule_GetDict(exmod);
p3imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError");
p3imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError");
+ p3imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError");
p3imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
p3imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
p3imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
Py_XINCREF(p3imp_PyExc_AttributeError);
Py_XINCREF(p3imp_PyExc_IndexError);
+ Py_XINCREF(p3imp_PyExc_KeyError);
Py_XINCREF(p3imp_PyExc_KeyboardInterrupt);
Py_XINCREF(p3imp_PyExc_TypeError);
Py_XINCREF(p3imp_PyExc_ValueError);
diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok
index fd670c8..20b00d4 100644
--- a/src/testdir/test86.ok
+++ b/src/testdir/test86.ok
@@ -38,7 +38,7 @@
Vim(python):E725:
Vim(python):E117:
[0.0, 0.0]
-IndexError
+KeyError
TypeError
TypeError
ValueError
diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok
index b876900..9d75c56 100644
--- a/src/testdir/test87.ok
+++ b/src/testdir/test87.ok
@@ -38,7 +38,7 @@
Vim(py3):E725:
Vim(py3):E117:
[0.0, 0.0]
-IndexError
+KeyError
TypeError
TypeError
ValueError
diff --git a/src/version.c b/src/version.c
index a28cf6c..1aeeb56 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 907,
+/**/
906,
/**/
905,