تقنية

allow_nan في بايثون: هل يمنع json.loads من قراءة NaN؟

allow_nan خيار في جهة الكتابة.
خيار كتابة.

allow_nan=False يخص الكتابة، لا القارئ الافتراضي. مثال كتابة: json.dumps(float("nan"),allow_nan=False) يطلق ValueError. [1]

الخلاصة السريعة

لا؛ هذا الخيار للمرمّز، ويمكن للقراءة الافتراضية قبول NaN. [1]

  • allow_nan=False يخص الكتابة، لا القارئ الافتراضي. مثال كتابة: json.dumps(float("nan"),allow_nan=False) يطلق ValueError. [1]
  • json.loads("NaN") يقبله افتراضيًا، رغم أنه خارج معيار JSON. [1]
  • على CPython 3.12.14: json.loads(raw,allow_nan=False) يطلق TypeError. [1]
  • للرفض في المثال: parse_constant=reject يطلق ValueError. [1]
  • تحكم: json.loads("[7]",parse_constant=reject) يعيد [7]؛ يبقى raw نص 'NaN'. [1]

خيار في جهة الكتابة

allow_nan=False يخص الكتابة، لا القارئ الافتراضي. مثال كتابة: json.dumps(float("nan"),allow_nan=False) يطلق ValueError. [1]

قبول خارج المعيار

json.loads("NaN") يقبله افتراضيًا، رغم أنه خارج معيار JSON. [1]

الكلمة المفتاحية في الجهة الأخرى

على CPython 3.12.14: json.loads(raw,allow_nan=False) يطلق TypeError. [1]

import json raw="NaN" def reject(token): raise ValueError(token) [1]

parse_constant خطاف للقارئ في المثال.
خطاف قراءة.

رفض الثابت والتحكم

للرفض في المثال: parse_constant=reject يطلق ValueError. [1]

json.loads(raw,parse_constant=reject) -> ValueError [1]

تحكم: json.loads("[7]",parse_constant=reject) يعيد [7]؛ يبقى raw نص 'NaN'. [1]

المراجع

  1. Python JSON

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.