🌳 עץ החריגות בפייתון
היררכיית החריגות וסדר התפיסה
⚠️ חשוב למבחן!
בבלוקי try-except, צריך לתפוס את החריגות הספציפיות לפני הכלליות. ZeroDivisionError יורש מ-ArithmeticError, לכן אם ArithmeticError מופיע ראשון - הוא יתפוס גם ZeroDivisionError!
🌲 מבנה ההיררכיה
▶
BaseExceptionSystemExitKeyboardInterruptGeneratorExit▶
ExceptionStopIteration▶
ArithmeticErrorAssertionErrorנפוץ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 / divisorIndexError❌ גורם לשגיאה:
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 = 0NameError❌ גורם לשגיאה:
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 = 20AttributeError❌ גורם לשגיאה:
"hello".append("!") # str אין לו append✅ פתרון:
lst = ["hello"]
lst.append("!")