diff options
author | Matthias Bussonnier <bussonniermatthias@gmail.com> | 2019-04-09 07:17:25 (GMT) |
---|---|---|
committer | Inada Naoki <songofacandy@gmail.com> | 2019-04-09 07:17:25 (GMT) |
commit | a8abe097c1165db25b429ca02a65c4f8acbc062b (patch) | |
tree | d34fbcd712d64413f1754eadbaca13acd21a57e1 /Lib | |
parent | 5909ad1217aad200c69ffa794fcab285bacb609e (diff) | |
download | cpython-a8abe097c1165db25b429ca02a65c4f8acbc062b.zip cpython-a8abe097c1165db25b429ca02a65c4f8acbc062b.tar.gz cpython-a8abe097c1165db25b429ca02a65c4f8acbc062b.tar.bz2 |
bpo-33461: emit DeprecationWarning when json.loads(encoding=...) is used (GH-6762)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/json/__init__.py | 13 | ||||
-rw-r--r-- | Lib/test/test_json/test_decode.py | 4 |
2 files changed, 15 insertions, 2 deletions
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py index 3bb4490..1ba8b48 100644 --- a/Lib/json/__init__.py +++ b/Lib/json/__init__.py @@ -296,7 +296,7 @@ def load(fp, *, cls=None, object_hook=None, parse_float=None, parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) -def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, +def loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw): """Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance containing a JSON document) to a Python object. @@ -330,7 +330,7 @@ def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` kwarg; otherwise ``JSONDecoder`` is used. - The ``encoding`` argument is ignored and deprecated. + The ``encoding`` argument is ignored and deprecated since Python 3.1. """ if isinstance(s, str): if s.startswith('\ufeff'): @@ -342,6 +342,15 @@ def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, f'not {s.__class__.__name__}') s = s.decode(detect_encoding(s), 'surrogatepass') + if "encoding" in kw: + import warnings + warnings.warn( + "'encoding' is ignored and deprecated. It will be removed in Python 3.9", + DeprecationWarning, + stacklevel=2 + ) + del kw['encoding'] + if (cls is None and object_hook is None and parse_int is None and parse_float is None and parse_constant is None and object_pairs_hook is None and not kw): diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py index fdb9e62..895c95b 100644 --- a/Lib/test/test_json/test_decode.py +++ b/Lib/test/test_json/test_decode.py @@ -95,5 +95,9 @@ class TestDecode: d = self.json.JSONDecoder() self.assertRaises(ValueError, d.raw_decode, 'a'*42, -50000) + def test_deprecated_encode(self): + with self.assertWarns(DeprecationWarning): + self.loads('{}', encoding='fake') + class TestPyDecode(TestDecode, PyTest): pass class TestCDecode(TestDecode, CTest): pass |