تقنية

HTTPError في بايثون: هل يمكن قراءة جسم من الاستثناء؟

استثناء مؤلف برمز 404 وجسم R بالبايتات
كائن مؤلف دون طلب. [1] [2] [3]

نؤلف استثناءً وجسمًا في الذاكرة. [1] [2] [3]

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

نعم؛ يمكن للكائن التصرف ككائن شبيه بملف. [1] [2] [3]

  • نضع البايت R في BytesIO. [1] [2] [3]
  • ننشئ HTTPError برمز مؤلف 404 وبذلك المخزن. [1] [2] [3]
  • نرفع الاستثناء ثم نلتقطه. [1] [2] [3]
  • تعيد القراءة الأولى b'R' والثانية b''. [1] [2] [3]
  • اختبرنا 3.12.14؛ لم نرسل طلب HTTP. [1] [2] [3]

المثال

import urllib.error as u,io
e=u.HTTPError('https://own.invalid',
 404,'own',{},io.BytesIO(b'R'))
try:raise e
except u.HTTPError as caught:
 print(caught.code,caught.read())
 print(caught.read())

[1] [2] [3]

المخرجان 404 b'R' ثم b''. [1] [2] [3]

الاستثناء والقراءة

القراءة تستهلك البايت المؤلف. بقاء الرمز 404 لا يعيد الجسم المستهلك؛ الصفة الاستثنائية لا تمنع قراءة المخزن. [1] [2] [3]

القراءة الأولى R والثانية بايتات فارغة
قراءتان للمخزن نفسه. [1] [2] [3]

حدود التجربة

العنوان والرمز والجسم مؤلفة. لا نثبت أن خادمًا رد بهذا الرمز أو أن كل خطأ يحمل جسمًا غير فارغ. [1] [2] [3]

المراجع

  1. Python: urllib.error
  2. CPython 3.12.14: urllib/error.py
  3. CPython 3.12.14: urllib/response.py
  4. موضوع تك: لغة بايثون — مفردات
  5. موضوع تك: تطبيقات بايثون — مفردات

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