Visitar URL original
Inconsistent errors for JSON-encoding NaNs with allow_nan=False · Issue #86018 · python/cpython · GitHub
Skip to content

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

Description

@earwig
mannequin
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']

Activity

  1. earwig commented on Sep 24, 2020

    earwigmannequin
    MannequinAuthor

    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.)

  2. added
    stdlibStandard Library Python modules in the Lib/ directory
    type-bugAn unexpected behavior, bug, or error
    on Sep 24, 2020
  3. transferred this issue fromon Apr 10, 2022
  4. added a commit that references this issue on Nov 6, 2022
  5. nineteendo commented on Jun 30, 2024

    @nineteendo
    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
  6. picnixz commented on Sep 7, 2024

    @picnixz
    Member

    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

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.10 (EOL)end of life3.8 (EOL)end of life3.9 (EOL)end of lifeextension-modulesC modules in the Modules dirstdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions