Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inconsistent errors for JSON-encoding NaNs with allow_nan=False #86018

Closed
earwig mannequin opened this issue Sep 24, 2020 · 3 comments
Closed

Inconsistent errors for JSON-encoding NaNs with allow_nan=False #86018

earwig mannequin opened this issue Sep 24, 2020 · 3 comments
Labels
3.8 (EOL) end of life 3.9 only security fixes 3.10 only security fixes extension-modules C modules in the Modules dir stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error

Comments

@earwig
Copy link
Mannequin

earwig mannequin commented Sep 24, 2020

BPO 41852
Nosy @serhiy-storchaka, @earwig

Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

Show more details

GitHub fields:

assignee = None
closed_at = None
created_at = <Date 2020-09-24.16:44:20.041>
labels = ['type-bug', '3.8', '3.9', '3.10', 'extension-modules', 'library']
title = 'Inconsistent errors for JSON-encoding NaNs with allow_nan=False'
updated_at = <Date 2020-09-24.17:05:07.621>
user = 'https://github.com/earwig'

bugs.python.org fields:

activity = <Date 2020-09-24.17:05:07.621>
actor = 'serhiy.storchaka'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Extension Modules', 'Library (Lib)']
creation = <Date 2020-09-24.16:44:20.041>
creator = 'earwig'
dependencies = []
files = []
hgrepos = []
issue_num = 41852
keywords = []
message_count = 1.0
messages = ['377450']
nosy_count = 2.0
nosy_names = ['serhiy.storchaka', 'earwig']
pr_nums = []
priority = 'normal'
resolution = None
stage = None
status = 'open'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue41852'
versions = ['Python 3.8', 'Python 3.9', 'Python 3.10']

@earwig
Copy link
Mannequin Author

earwig mannequin commented Sep 24, 2020

json.dump vs. json.dumps have inconsistent error messages when encoding NaN with allow_nan=False:

>>> json.dumps(float('nan'), allow_nan=False)
ValueError: Out of range float values are not JSON compliant
>>> json.dump(float('nan'), sys.stdout, allow_nan=False)
ValueError: Out of range float values are not JSON compliant: nan

json.dump's error includes the value (which is useful); json.dumps's does not.

json.dumps uses this C implementation:

static PyObject *

json.dump uses this Python implementation:
def floatstr(o, allow_nan=self.allow_nan,

(Separately, is it expected that only one uses the C implementation? This seems it could have unexpected performance implications - without testing, I would've expected json.dump to take the "faster" path since it doesn't need to hold the entire encoded string in memory.)

@earwig earwig mannequin added 3.8 (EOL) end of life 3.9 only security fixes 3.10 only security fixes extension-modules C modules in the Modules dir stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error labels Sep 24, 2020
@ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
WillAyd added a commit to WillAyd/cpython that referenced this issue Nov 6, 2022
…nan=False

Fix issue where json.dumps provided a different error message than json.dump
with non-finite values
@nineteendo
Copy link
Contributor

This seems to be fixed:

>>> json.dumps(float('nan'), allow_nan=False)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\wanne\AppData\Local\Programs\Python\Python312\Lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
          ^^^^^^^^^^^
  File "C:\Users\wanne\AppData\Local\Programs\Python\Python312\Lib\json\encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\wanne\AppData\Local\Programs\Python\Python312\Lib\json\encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
ValueError: Out of range float values are not JSON compliant: nan

@picnixz
Copy link
Contributor

picnixz commented Sep 7, 2024

It was reported in a separate issue #99925 and resolved by #99926. I think this one was just forgotten. I'll close it as completed, even though it's a duplicate (well technically, the other is a duplicate...)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.8 (EOL) end of life 3.9 only security fixes 3.10 only security fixes extension-modules C modules in the Modules dir stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error
Projects
Status: Done
Development

No branches or pull requests

2 participants