mirror of https://github.com/python/cpython
Issue #16761: Raise TypeError when int() or long() called with base argument only.
This commit is contained in:
parent
3684c79e00
commit
cf095f8e0f
|
@ -60,6 +60,8 @@ class IntLongCommonTests(object):
|
|||
self.assertEqual(self.ntype(x=1.2), 1)
|
||||
self.assertEqual(self.ntype('100', base=2), 4)
|
||||
self.assertEqual(self.ntype(x='100', base=2), 4)
|
||||
self.assertRaises(TypeError, self.ntype, base=10)
|
||||
self.assertRaises(TypeError, self.ntype, base=0)
|
||||
|
||||
class IntTestCases(IntLongCommonTests, unittest.TestCase):
|
||||
|
||||
|
@ -365,18 +367,6 @@ class IntTestCases(IntLongCommonTests, unittest.TestCase):
|
|||
|
||||
def test_error_on_string_base(self):
|
||||
self.assertRaises(TypeError, int, 100, base='foo')
|
||||
# Include the following because in contrast CPython raises no error
|
||||
# for bad integer bases when x is not given.
|
||||
self.assertRaises(TypeError, int, base='foo')
|
||||
|
||||
# For example, PyPy 1.9.0 raised TypeError for these cases because it
|
||||
# expects x to be a string if base is given.
|
||||
@test_support.cpython_only
|
||||
def test_int_base_without_x_returns_0(self):
|
||||
self.assertEqual(int(base=6), 0)
|
||||
# Even invalid bases don't raise an exception.
|
||||
self.assertEqual(int(base=1), 0)
|
||||
self.assertEqual(int(base=1000), 0)
|
||||
|
||||
@test_support.cpython_only
|
||||
def test_small_ints(self):
|
||||
|
|
|
@ -9,6 +9,9 @@ What's New in Python 2.7.4
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #16761: Calling ``int()`` and ``long()`` with *base* argument only
|
||||
now raises TypeError.
|
||||
|
||||
- Issue #16759: Support the full DWORD (unsigned long) range in Reg2Py
|
||||
when retreiving a REG_DWORD value. This corrects functions like
|
||||
winreg.QueryValueEx that may have been returning truncated values.
|
||||
|
|
|
@ -1059,8 +1059,14 @@ int_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:int", kwlist,
|
||||
&x, &base))
|
||||
return NULL;
|
||||
if (x == NULL)
|
||||
if (x == NULL) {
|
||||
if (base != -909) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"int() missing string argument");
|
||||
return NULL;
|
||||
}
|
||||
return PyInt_FromLong(0L);
|
||||
}
|
||||
if (base == -909)
|
||||
return PyNumber_Int(x);
|
||||
if (PyString_Check(x)) {
|
||||
|
|
|
@ -3987,8 +3987,14 @@ long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:long", kwlist,
|
||||
&x, &base))
|
||||
return NULL;
|
||||
if (x == NULL)
|
||||
if (x == NULL) {
|
||||
if (base != -909) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"long() missing string argument");
|
||||
return NULL;
|
||||
}
|
||||
return PyLong_FromLong(0L);
|
||||
}
|
||||
if (base == -909)
|
||||
return PyNumber_Long(x);
|
||||
else if (PyString_Check(x)) {
|
||||
|
|
Loading…
Reference in New Issue