]> granicus.if.org Git - python/commitdiff
Issue #8950: Make PyArg_Parse* with 'L' code raise for float inputs,
authorMark Dickinson <dickinsm@gmail.com>
Thu, 10 Jun 2010 16:05:10 +0000 (16:05 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Thu, 10 Jun 2010 16:05:10 +0000 (16:05 +0000)
instead of warning.  This makes it consistent with the other integer
codes.

Lib/test/test_getargs2.py
Misc/NEWS
Python/getargs.c

index 7fa598374e678b83b969aff5c1233e08bd8ab435..baf70d16321c538904b90bc05dab4a1aa03e1b42 100644 (file)
@@ -1,7 +1,6 @@
 import unittest
 from test import support
 from _testcapi import getargs_keywords
-import warnings
 
 """
 > How about the following counterproposal. This also changes some of
@@ -190,21 +189,7 @@ class LongLong_TestCase(unittest.TestCase):
         from _testcapi import getargs_L
         # L returns 'long long', and does range checking (LLONG_MIN
         # ... LLONG_MAX)
-        with warnings.catch_warnings():
-            warnings.filterwarnings(
-                "ignore",
-                category=DeprecationWarning,
-                message=".*integer argument expected, got float",
-                module=__name__)
-            self.assertEqual(3, getargs_L(3.14))
-        with warnings.catch_warnings():
-            warnings.filterwarnings(
-                "error",
-                category=DeprecationWarning,
-                message=".*integer argument expected, got float",
-                module="unittest")
-            self.assertRaises(DeprecationWarning, getargs_L, 3.14)
-
+        self.assertRaises(TypeError, getargs_L, 3.14)
         self.assertRaises(TypeError, getargs_L, "Hello")
         self.assertEqual(99, getargs_L(Int()))
 
index f0b7875e4b15971aefc690e10974f324650ac93d..24d1e7f008ee1c3d616db4491f851f98ebab0379 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,11 @@ What's New in Python 3.2 Alpha 1?
 Core and Builtins
 -----------------
 
+- Issue #8950: (See also issue #5080).  Py_ArgParse*() functions now
+  raise TypeError instead of giving a DeprecationWarning when a float
+  is parsed using the 'L' code (for long long).  (All other integer
+  codes already raise TypeError in this case.)
+
 - Issue #8922: Normalize the encoding name in PyUnicode_AsEncodedString() to
   enable shortcuts for upper case encoding name. Add also a shortcut for
   "iso-8859-1" in PyUnicode_AsEncodedString() and PyUnicode_Decode().
index 2a26a8f9f359cfc00e70507b9d500efa4b7b5231..127b1473a67ae8ad108407e26790c8c68157b1dc 100644 (file)
@@ -582,19 +582,6 @@ converterr(const char *expected, PyObject *arg, char *msgbuf, size_t bufsize)
 
 #define CONV_UNICODE "(unicode conversion error)"
 
-/* explicitly check for float arguments when integers are expected.  For now
- * signal a warning.  Returns true if an exception was raised. */
-static int
-float_argument_warning(PyObject *arg)
-{
-    if (PyFloat_Check(arg) &&
-        PyErr_Warn(PyExc_DeprecationWarning,
-                   "integer argument expected, got float" ))
-        return 1;
-    else
-        return 0;
-}
-
 /* Explicitly check for float arguments when integers are expected.
    Return 1 for error, 0 if ok. */
 static int
@@ -791,14 +778,13 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
     case 'L': {/* PY_LONG_LONG */
         PY_LONG_LONG *p = va_arg( *p_va, PY_LONG_LONG * );
         PY_LONG_LONG ival;
-        if (float_argument_warning(arg))
+        if (float_argument_error(arg))
             return converterr("long<L>", arg, msgbuf, bufsize);
         ival = PyLong_AsLongLong(arg);
-        if (ival == (PY_LONG_LONG)-1 && PyErr_Occurred() ) {
+        if (ival == (PY_LONG_LONG)-1 && PyErr_Occurred())
             return converterr("long<L>", arg, msgbuf, bufsize);
-        } else {
+        else
             *p = ival;
-        }
         break;
     }