[Python-checkins] r81873 - in python/branches/py3k: Lib/test/test_getargs2.py Misc/NEWS Python/getargs.c

mark.dickinson python-checkins at python.org
Thu Jun 10 18:05:10 CEST 2010


Author: mark.dickinson
Date: Thu Jun 10 18:05:10 2010
New Revision: 81873

Log:
Issue #8950: Make PyArg_Parse* with 'L' code raise for float inputs,
instead of warning.  This makes it consistent with the other integer
codes.


Modified:
   python/branches/py3k/Lib/test/test_getargs2.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Python/getargs.c

Modified: python/branches/py3k/Lib/test/test_getargs2.py
==============================================================================
--- python/branches/py3k/Lib/test/test_getargs2.py	(original)
+++ python/branches/py3k/Lib/test/test_getargs2.py	Thu Jun 10 18:05:10 2010
@@ -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 @@
         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()))
 

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Thu Jun 10 18:05:10 2010
@@ -12,6 +12,11 @@
 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().

Modified: python/branches/py3k/Python/getargs.c
==============================================================================
--- python/branches/py3k/Python/getargs.c	(original)
+++ python/branches/py3k/Python/getargs.c	Thu Jun 10 18:05:10 2010
@@ -582,19 +582,6 @@
 
 #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 @@
     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;
     }
 


More information about the Python-checkins mailing list