נושא
השגיאות שפגשנו
שמונה שגיאות, ועוד אחת שלא מודיעה על עצמה.
מגיע מיחידות: 2, 3, 4, 5, 6, 7, 8
איך קוראים Traceback
- השורה האחרונה קודם. שם כתוב סוג השגיאה והסבר קצר
- מספר השורה אומר איפה פייתון נתקעה
- הסמן הקטן (
^) מצביע על המקום המדויק בשורה
המקום שפייתון נתקעה בו הוא לא תמיד המקום של הטעות. במרכאה שלא נסגרה, הטעות בהתחלה של השורה והגילוי בסופה.
הטבלה
| שגיאה | מה היא אומרת | איפה ראינו | התיקון |
|---|---|---|---|
SyntaxError |
הקוד לא בנוי לפי חוקי השפה | 3.1: מרכאות. 5.3: ברירת מחדל לפני פרמטר בלי | לתקן את הכתיבה |
IndentationError |
הזחה במקום הלא נכון | 4.1: רווחים בתחילת שורה | ארבעה רווחים, רק בתוך בלוק |
TypeError |
פעולה שהטיפוס לא תומך בה | 2.3, 3.3, 5.1, 6.2, 8.1 | הסבה, או טיפוס אחר |
NameError |
שם שלא מוכר כאן | 5.2: משתנה לוקאלי מחוץ לפונקציה | לבדוק איות וטווח הכרה |
IndexError |
מיקום שלא קיים | 3.3, 6.3 | לבדוק את len |
ValueError |
הערך לא מתאים | 6.3: remove של ערך שאינו ברשימה |
לבדוק עם in לפני |
KeyError |
מפתח שלא קיים במילון | 8.3 | לבדוק עם in לפני |
| שגיאה לוגית | אין הודעה. התוכנית עושה משהו אחר | 7.1: לולאה שלא נגמרת | לבדוק את ההנחות |
TypeError: חמש פנים
אותה שגיאה, חמש סיבות שונות. מה שמשותף להן: הטיפוס לא מתאים לפעולה.
>>> "5" ** 2
Traceback (most recent call last):
...
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
>>> "Change me"[0] = "S"
Traceback (most recent call last):
...
TypeError: 'str' object does not support item assignment
>>> ("a", "b")[0] = "c"
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment
>>> ["H"] + "O"
Traceback (most recent call last):
...
TypeError: can only concatenate list (not "str") to list
>>> def square(number):
... return number ** 2
...
>>> square()
Traceback (most recent call last):
...
TypeError: square() missing 1 required positional argument: 'number'
השאר
>>> 'I really hope defining this string will work"
Traceback (most recent call last):
...
SyntaxError: unterminated string literal (detected at line 1)
>>> "joker"[5]
Traceback (most recent call last):
...
IndexError: string index out of range
>>> ["Earth"].remove("Pluto")
Traceback (most recent call last):
...
ValueError: list.remove(x): x not in list
>>> {"copy": "Ctrl+C"}["cut"]
Traceback (most recent call last):
...
KeyError: 'cut'
בגרסאות ישנות ה-SyntaxError של מרכאה פתוחה מנוסח
EOL while scanning string literal, וזה מה שמופיע בסרטון.
השגיאה השקטה
answer = input("How many months? ")
while answer != 7:
answer = input("Try again: ")
התוכנית לא קורסת, ואין שום הודעה. היא פשוט שואלת לנצח, כי "7" אינו
7. שגיאה לוגית היא הקשה ביותר, כי אין מה לקרוא. מה שעוזר:
להדפיס ערכים באמצע (print(answer, type(answer))) ולבדוק את ההנחות.
בדיקה עצמית
איזו שגיאה תתקבל?
print("hello')[1, 2, 3][3]"3" + 3{"a": 1}["b"]if True:ושורה אחריה בלי הזחהdef f(): y = 1, ואזprint(y)
תשובות. 1: SyntaxError. 2: IndexError, כי המיקום האחרון הוא 2.
3: TypeError. 4: KeyError. 5: IndentationError. 6: NameError,
כי y לוקאלי.