Loading ...
Sorry, an error occurred while loading the content.

[PATCH] (1/?) Python interface improvements: replacing IndexError with KeyError for dictionaries

Expand Messages
  • ZyX
    A series of patches with python interface improvements: - a change to make things more pythonic (this one) - a bug fix (second patch) - some refactoring (third
    Message 1 of 49 , Apr 23, 2013
    • 0 Attachment
      A series of patches with python interface improvements:

      - a change to make things more pythonic (this one)
      - a bug fix (second patch)
      - some refactoring (third and fourth)
      - new interfaces (fifth and later)

      # HG changeset patch
      # User ZyX <kp-pav@...>
      # Date 1366475031 -14400
      # Branch python-extended-2
      # Node ID ef93c86c326eaf3ff86a6f1a5a85a0efac52621f
      # Parent ef341d8811b2af10623f034370600cc611b165d9
      Make DictionaryItem raise KeyError in place of IndexError

      diff -r ef341d8811b2 -r ef93c86c326e src/if_py_both.h
      --- a/src/if_py_both.h Mon Apr 15 22:22:58 2013 +0200
      +++ b/src/if_py_both.h Sat Apr 20 20:23:51 2013 +0400
      @@ -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 -r ef341d8811b2 -r ef93c86c326e src/if_python.c
      --- a/src/if_python.c Mon Apr 15 22:22:58 2013 +0200
      +++ b/src/if_python.c Sat Apr 20 20:23:51 2013 +0400
      @@ -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 -r ef341d8811b2 -r ef93c86c326e src/if_python3.c
      --- a/src/if_python3.c Mon Apr 15 22:22:58 2013 +0200
      +++ b/src/if_python3.c Sat Apr 20 20:23:51 2013 +0400
      @@ -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 -r ef341d8811b2 -r ef93c86c326e src/testdir/test86.ok
      --- a/src/testdir/test86.ok Mon Apr 15 22:22:58 2013 +0200
      +++ b/src/testdir/test86.ok Sat Apr 20 20:23:51 2013 +0400
      @@ -38,7 +38,7 @@
      Vim(python):E725:
      Vim(python):E117:
      [0.0, 0.0]
      -IndexError
      +KeyError
      TypeError
      TypeError
      ValueError
      diff -r ef341d8811b2 -r ef93c86c326e src/testdir/test87.ok
      --- a/src/testdir/test87.ok Mon Apr 15 22:22:58 2013 +0200
      +++ b/src/testdir/test87.ok Sat Apr 20 20:23:51 2013 +0400
      @@ -38,7 +38,7 @@
      Vim(py3):E725:
      Vim(py3):E117:
      [0.0, 0.0]
      -IndexError
      +KeyError
      TypeError
      TypeError
      ValueError

      --
      --
      You received this message from the "vim_dev" maillist.
      Do not top-post! Type your reply below the text you are replying to.
      For more information, visit http://www.vim.org/maillist.php

      ---
      You received this message because you are subscribed to the Google Groups "vim_dev" group.
      To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    • ZyX
      ... Because you have problems with encoding somewhere: there were no question marks in the patch, but Russian text. I just was not aware of the strange choice:
      Message 49 of 49 , May 15, 2013
      • 0 Attachment
        > After including this patch the tests were failing. The .ok files had
        > "????" where the test results in "window". I assume those question
        > marks were wrong, so I fixed the .ok files for that. But I wonder why
        > this happened.

        Because you have problems with encoding somewhere: there were no question marks in the patch, but Russian text. I just was not aware of the strange choice: using translated strings in `repr()`. I think translated messages here are just as “good” as translated exceptions; needless to say I have never seen them translated in other projects.

        --
        --
        You received this message from the "vim_dev" maillist.
        Do not top-post! Type your reply below the text you are replying to.
        For more information, visit http://www.vim.org/maillist.php

        ---
        You received this message because you are subscribed to the Google Groups "vim_dev" group.
        To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
        For more options, visit https://groups.google.com/groups/opt_out.
      Your message has been successfully submitted and would be delivered to recipients shortly.