הבנת מערכת הסוג של Python היא המפתח לפתרון הבאג המסובך הזה.

מנסים לאחזר נתונים מאובייקט ורואה במקום זאת שגיאת "האובייקט אינו בר מנוי"? הבעיה היא שאתה מוסיף לאינדקס את סוג הנתונים הלא נכון.

גלה הכל על סוגי הרשמה וכיצד לפתור שגיאה זו.

מה המשמעות של "ניתן לרשום" ב-Python?

המונח "ניתן לרשום" ב-Python פירושו סוג נתונים המאחסן מספר ערכים שאליהם אתה יכול לגשת בנפרד. אתה יכול לגשת לערך ספציפי מסוג נתונים שניתן להרשם באמצעות האינדקס שלו, באמצעות סימון סוגריים מרובעים ([]).

אם תנסה לגשת לפריטים בסוג נתונים שאינו ניתן לאינדקס, Python מעלה חריג "TypeError: object is not subscriptable".

סוגי הנתונים הבאים ניתנים ל-subscriptable ב-Python: רשימות, מחרוזות, tuples ומילונים.

list_example = [1, 3, 5, "אידוו"]
string_example = "אידואו אומיסולה"
tuple_example = (1, 3, 5, "אידוו")
dict_example = {"שֵׁם": "אידוו", "שפה": "יורובה"}

הדפס (דוגמה_רשימה[0]) # 1
הדפס (מחרוזת_דוגמה[3]) # w
print (tuple_example[1]) # 3
print (dict_example["שֵׁם"]) #אידוו

עם זאת, סטים, מספרים שלמים, צפים ובוליאנים אינם נגישים באמצעות אינדקס, כך שהם לא ניתנים להרשמה:

instagram viewer
float_example = 12.45
int_example = 12367
bool_example = נָכוֹן
set_example = {1, 3, 5, "פִּיתוֹן"}

print (float_example[1])
print (bool_example[2])
print (int_example[2])
print (set_example[2])

ניסיון להריץ כל אחד מהמשפטים הללו מוציא את החריג "האובייקט אינו ניתן ל-subscriptable":

פתרון החריג

קל יותר לפתור את החריג "האובייקט אינו בר מנוי" ברגע שאתה מבין את הכללים לגישה לכל סוג נתונים. אז התחל את איתור הבאגים של Python על ידי בדיקת סוג הנתונים של האובייקט שאתה מנסה לאינדקס.

float_example = 12.45
int_example = 12367
bool_example = נָכוֹן
set_example = {1, 3, 5, "פִּיתוֹן"}

print (סוג (float_example)) #
print (סוג (int_example)) #
הדפס (סוג (bool_example)) #
print (type (set_example)) #

לאחר שתקבע שסוג הנתונים אינו ניתן ל-subscriptable, המרתו לסוג שניתן להוספה לאינדקס פותרת את הבעיה. זה שימושי אם הנתונים הם מאת ממשק API של צד שלישי. המרת סוגי נתונים כמו מספר שלם, צף ובוליאני למחרוזת הופכת אותם לניתנים להרשמה:

print (str (float_example)[:2]) # 12
print (str (int_example)[:2]) # 12
print (str (bool_example)[:2]) # Tr

אתה יכול אפילו לתפעל את מחרוזות Python שהתקבלו כרצונך. אם אתה עוסק במספר שלם ובצף, ייתכן שתרצה לשמור על סוג הנתונים המקורי בפלט. כדי לעשות זאת, המר את הערך המתקבל לסוג הנתונים המקורי שלהם לאחר הוספתם לאינדקס כמחרוזות:

converted_float = float (str (float_example)[:2])
converted_int = int (str (int_example)[:2])

# 12.0 סוג נתונים:
print (converted_float, סוג f'Data:{סוג (converted_float)}')

# 12 סוג נתונים:
print (converted_int, סוג f'Data:{type (converted_int)}')

לגבי סט, אתה יכול להפוך אותו לרשימה. למרות שאתה יכול להמיר אובייקט מוגדר לרשימה באמצעות ה רשימה (סט) Python one-liner, זה לא שומר על מיקומי הפריטים ברשימה המתקבלת. כדי להבטיח שתקבל רשימה עם מיקומי פריט שמורים, השתמש בפונקציית lambda של Python כך:

set_example = {1, 3, 5, "פִּיתוֹן"}
converted = sorted (set_example, key=למבדה x: (isinstance (x, str), x))

הדפס (הומר[3]) # פייתון

ניפוי באגים בפיתון מאסטר

לפייתון יש עקומת למידה חלקה. אבל חריגים פשוטים יכולים להעיף אותך אם אתה לא יודע איך להתמודד איתם. לימוד ניפוי באגים בקוד שלך ולקחת את הזמן שלך בפתרון בעיות מוביל לתיקון שגיאות קידוד של Python וחריגים.