mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
Issue #5080: turn the DeprecationWarning from float arguments passed
to integer PyArg_Parse* format codes into a TypeError. Add a DeprecationWarning for floats passed with the 'L' format code, which didn't previously have a warning.
This commit is contained in:
parent
edfe72f66f
commit
1b34d2552c
6 changed files with 65 additions and 28 deletions
|
|
@ -526,7 +526,7 @@ converterr(const char *expected, PyObject *arg, char *msgbuf, size_t bufsize)
|
|||
/* 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_error(PyObject *arg)
|
||||
float_argument_warning(PyObject *arg)
|
||||
{
|
||||
if (PyFloat_Check(arg) &&
|
||||
PyErr_Warn(PyExc_DeprecationWarning,
|
||||
|
|
@ -536,6 +536,20 @@ float_argument_error(PyObject *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* explicitly check for float arguments when integers are expected. Raises
|
||||
TypeError and returns true for float arguments. */
|
||||
static int
|
||||
float_argument_error(PyObject *arg)
|
||||
{
|
||||
if (PyFloat_Check(arg)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"integer argument expected, got float");
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Convert a non-tuple argument. Return NULL if conversion went OK,
|
||||
or a string with a message describing the failure. The message is
|
||||
formatted as "must be <desired type>, not <actual type>".
|
||||
|
|
@ -719,7 +733,10 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
|
|||
#ifdef HAVE_LONG_LONG
|
||||
case 'L': {/* PY_LONG_LONG */
|
||||
PY_LONG_LONG *p = va_arg( *p_va, PY_LONG_LONG * );
|
||||
PY_LONG_LONG ival = PyLong_AsLongLong( arg );
|
||||
PY_LONG_LONG ival;
|
||||
if (float_argument_warning(arg))
|
||||
return converterr("long<L>", arg, msgbuf, bufsize);
|
||||
ival = PyLong_AsLongLong(arg);
|
||||
if (ival == (PY_LONG_LONG)-1 && PyErr_Occurred() ) {
|
||||
return converterr("long<L>", arg, msgbuf, bufsize);
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue