🌳 עץ החריגות בפייתון

היררכיית החריגות וסדר התפיסה

⚠️ חשוב למבחן!

בבלוקי try-except, צריך לתפוס את החריגות הספציפיות לפני הכלליות. ZeroDivisionError יורש מ-ArithmeticError, לכן אם ArithmeticError מופיע ראשון - הוא יתפוס גם ZeroDivisionError!

🌲 מבנה ההיררכיה

BaseException
SystemExit
KeyboardInterrupt
GeneratorExit
Exception
StopIteration
ArithmeticError
AssertionErrorנפוץ
AttributeErrorנפוץ
EOFError
ImportError
LookupError
NameErrorנפוץ
OSError
RuntimeError
SyntaxErrorנפוץ
TypeErrorנפוץ
ValueErrorנפוץ

💡 לחץ על חץ כדי לפתוח/לסגור. חריגות בכתום הן הנפוצות ביותר.

📋 סדר תפיסת חריגות

# סדר ה-except חשוב!
# תמיד שים את החריגות הספציפיות קודם

try:
    x = 1 / 0
except ArithmeticError:  # יתפוס ראשון!
    print("שגיאת חישוב")
except ZeroDivisionError:  # לעולם לא יגיע לכאן
    print("חלוקה באפס")

# הסדר הנכון:
try:
    x = 1 / 0  
except ZeroDivisionError:  # ספציפי קודם
    print("חלוקה באפס")
except ArithmeticError:  # כללי אחר כך
    print("שגיאת חישוב אחרת")

🔥 חריגות נפוצות ואיך לטפל בהן

ZeroDivisionError

❌ גורם לשגיאה:

x = 5 / 0  # חלוקה באפס

✅ פתרון:

if divisor != 0:
    x = 5 / divisor
IndexError

❌ גורם לשגיאה:

lst = [1, 2, 3]
print(lst[5])  # אינדקס לא קיים

✅ פתרון:

if index < len(lst):
    print(lst[index])
KeyError

❌ גורם לשגיאה:

d = {"a": 1}
print(d["b"])  # מפתח לא קיים

✅ פתרון:

print(d.get("b", "default"))
# או
if "b" in d:
    print(d["b"])
TypeError

❌ גורם לשגיאה:

"hello" + 5  # לא ניתן לחבר str ו-int

✅ פתרון:

"hello" + str(5)
ValueError

❌ גורם לשגיאה:

int("hello")  # לא ניתן להמיר

✅ פתרון:

try:
    x = int(s)
except ValueError:
    x = 0
NameError

❌ גורם לשגיאה:

print(undefined_var)  # משתנה לא מוגדר

✅ פתרון:

x = 10
print(x)
UnboundLocalError

❌ גורם לשגיאה:

x = 10
def foo():
    print(x)  # נקרא לפני הגדרה
    x = 20

✅ פתרון:

x = 10
def foo():
    global x
    print(x)
    x = 20
AttributeError

❌ גורם לשגיאה:

"hello".append("!")  # str אין לו append

✅ פתרון:

lst = ["hello"]
lst.append("!")