يعد فهم نظام الكتابة في Python هو المفتاح لحل هذا الخطأ الصعب.

هل تحاول استرداد البيانات من كائن ورؤية خطأ "الكائن غير قابل للكتابة" بدلاً من ذلك؟ المشكلة هي أنك تقوم بفهرسة نوع بيانات خاطئ.

تعرف على كل ما يتعلق بالأنواع القابلة للاكتتاب وكيفية حل هذا الخطأ.

ماذا تعني كلمة "Subscriptable" في بايثون؟

مصطلح "قابل للاشتراك" في بايثون يعني نوع بيانات يخزن قيمًا متعددة يمكنك الوصول إليها بشكل فردي. يمكنك الوصول إلى قيمة محددة من نوع بيانات قابل للاكتتاب عبر فهرسها ، باستخدام تدوين الأقواس المربعة ([]).

إذا حاولت الوصول إلى العناصر الموجودة في نوع بيانات غير قابل للفهرسة ، فإن Python تثير استثناء "TypeError: object is not Subscriptable".

أنواع البيانات التالية قابلة للاشتراك في بايثون: القوائم ، والسلاسل ، والقواميس ، والقواميس.

list_example = [1, 3, 5, "إيدوو"]
string_example = "إيدوو أوميسولا"
tuple_example = (1, 3, 5, "إيدوو")
ict_example = {"اسم": "إيدوو", "لغة": "اليوروبا"}

طباعة (list_example [0]) # 1
طباعة (string_example [3]) # ث
print (tuple_example [1]) # 3
طباعة (dict_example ["اسم"]) # ايدوو

instagram viewer

ومع ذلك ، لا يمكن الوصول إلى المجموعات ، والأعداد الصحيحة ، والعوامات ، و Booleans من خلال الفهرسة ، لذا فهي غير قابلة للاشتراك:

float_example = 12.45
int_example = 12367
bool_example = حقيقي
set_example = {1, 3, 5, "بايثون"}

طباعة (float_example [1])
طباعة (bool_example [2])
طباعة (int_example [2])
طباعة (set_example [2])

تؤدي محاولة تشغيل كل من هذه العبارات إلى استثناء "الكائن غير قابل للاشتراك":

حل الاستثناء

حل استثناء "الكائن غير قابل للاشتراك" يكون أسهل بمجرد فهم قواعد الوصول إلى كل نوع من أنواع البيانات. لذا ابدأ في تصحيح أخطاء Python عن طريق التحقق من نوع بيانات الكائن الذي تحاول فهرسته.

float_example = 12.45
int_example = 12367
bool_example = حقيقي
set_example = {1, 3, 5, "بايثون"}

طباعة (type (float_example)) #
طباعة (نوع (int_example)) #
طباعة (type (bool_example)) #
طباعة (type (set_example)) #

بمجرد أن تحدد أن نوع البيانات غير قابل للاشتراك ، فإن تحويله إلى نوع قابل للفهرسة يحل المشكلة. هذا مفيد إذا كانت البيانات من طرف ثالث API. تحويل أنواع البيانات مثل عدد صحيح ، وعائم ، و Boolean إلى سلسلة يجعلها قابلة للاكتتاب:

طباعة (str (float_example) [:2]) # 12
طباعة (str (int_example) [:2]) # 12
طباعة (str (bool_example) [:2]) # آر

يمكنك حتى التلاعب في سلاسل بايثون الناتجة كما تريد. إذا كنت تتعامل مع عدد صحيح وعائم ، فقد ترغب في الاحتفاظ بنوع البيانات الأصلي في المخرجات. للقيام بذلك ، قم بتحويل القيمة الناتجة إلى نوع بياناتها الأصلي بعد فهرستها كسلاسل:

convert_float = float (str (float_example) [:2])
convert_int = int (str (int_example) [:2])

# 12.0 نوع البيانات:
طباعة (تم تحويله على قدم وساق ، نوع البيانات:{type (convert_float)}')

# 12 نوع البيانات:
طباعة (convert_int ، نوع البيانات:{type (convert_int)}')

بالنسبة للمجموعة ، يمكنك تحويلها إلى قائمة. على الرغم من أنه يمكنك تحويل كائن مجموعة إلى قائمة باستخدام امتداد قائمة (مجموعة) سطر واحد من Python ، لا يحافظ هذا على مواضع العناصر في القائمة الناتجة. لضمان حصولك على قائمة بمواضع العناصر المحفوظة ، استخدم وظيفة لامدا في Python مثل:

set_example = {1, 3, 5, "بايثون"}
تم تحويلها = تم فرزها (set_example ، مفتاح =لامدا x: (isinstance (x، str)، x))

طباعة (محولة [3]) # بايثون

إتقان تصحيح أخطاء بايثون

لدى بايثون منحنى تعليمي سلس. لكن الاستثناءات البسيطة يمكن أن تتسبب في إزعاجك إذا كنت لا تعرف كيفية التعامل معها. إن تعلم تصحيح أخطاء الكود الخاص بك وأخذ وقتك في حل المشكلات يقطع شوطًا طويلاً في إصلاح أخطاء واستثناءات ترميز Python.