חריגים המוגדרים על ידי משתמש נוצרים על ידי הגדרת מחלקה חדשה שיורשת ממנה החריגה המובנית של Python מחלקה או אחת מתתי המחלקות שלה. על ידי כך נוכל ליצור הודעות שגיאה מותאמות אישית ולטפל בשגיאות ספציפיות בצורה הגיונית עבור היישום שלנו.
שלבים ליצירה ושימוש בחריגים בהגדרת משתמש
בצע את השלבים הבאים כדי ליצור ולהשתמש בחריגים בהגדרת משתמש ב-Python:
- הגדר מחלקת חריגה חדשה: צור מחלקה חדשה שיורשת מ-Exception או מכל תת-מחלקות שלה.
- העלה את החריג: השתמש בהצהרת העלאה כדי להעלות את החריג המוגדר על ידי המשתמש כאשר מתרחש מצב ספציפי.
- טפל בחריג: השתמש בלוקים של try-except כדי לטפל בחריג המוגדר על ידי המשתמש.
דוּגמָה: בדוגמה זו אנו יוצרים חריג מותאם אישית InvalidAgeError כדי להבטיח שערכי גיל נמצאים בטווח חוקי (0-120).
Python
# Step 1: Define a custom exception class class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120'): self.age = age self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.age} -> {self.msg}' # Step 2: Use the custom exception in your code def set_age(age): if age < 0 or age > 120: raise InvalidAgeError(age) else: print(f'Age set to: {age}') # Step 3: Handling the custom exception try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e)
תְפוּקָה
150 -> Age must be between 0 and 120
הֶסבֵּר:
- מחלקת InvalidAgeError יורשת מ-Exception. זה מגדיר א __חַם__ שיטה לקבל גיל ומסר.
- השיטה __str__ מחזירה ייצוג מחרוזת קריא של השגיאה.
- ב-set_age() אם הגיל נמצא מחוץ לטווח החוקי (0-120), החריג מועלה.
- הבלוק try-except תופס את החריג ומדפיס את הודעת השגיאה.
התאמה אישית של שיעורי חריגים
כאשר אנו יוצרים חריג מותאם אישית, אנו מחלקים משנה את מחלקת ה-Exception המובנית של Python (או תת-מחלקה כמו ValueError TypeError וכו'). לאחר מכן נוכל להוסיף שיטות תכונות משלנו או לוגיקה מותאמת אישית כדי להפוך את החריגה שלנו לאינפורמטיבית יותר.
אנו יכולים גם לשפר חריגים מותאמים אישית על ידי הוספת תכונות נוספות או שיטות עקיפה.
דוּגמָה: כאן אנו משפרים את InvalidAgeError על ידי הוספת קוד שגיאה והתאמה אישית של הודעת השגיאה.
Pythonclass InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120' error_code=1001): self.age = age self.msg = msg self.error_code = error_code super().__init__(self.msg) def __str__(self): return f'[Error Code {self.error_code}] {self.age} -> {self.msg}' try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e)
תְפוּקָה
[Error Code 1001] 150 -> Age must be between 0 and 120
הֶסבֵּר:
- ל-InvalidAgeError יש כעת תכונה נוספת error_code.
- שיטת __str__ נדחפת כדי להציג גם את קוד השגיאה וגם את הגיל.
- כאשר set_age(150) מבוצע, החריג מועלה ונתפס בבלוק try-except.
- הודעת השגיאה המותאמת אישית מודפסת מה שהופך את השגיאה לתיאורית יותר.
שימוש בחריגים סטנדרטיים כמחלקת בסיס
לפעמים במקום לרשת ישירות מ-Exception, אנו יכולים ליצור חריג מותאם אישית על-ידי סיווג משנה של חריג סטנדרטי כגון RuntimeError ValueError וכו'. זה שימושי כאשר יש להתייחס לחריג המותאם אישית שלך כסוג מסוים של שגיאה.
דוּגמָה: דוגמה זו מראה כיצד ליצור חריג מותאם אישית NetworkError על ידי ירושה מ-RuntimeError שהוא חריג מובנה סטנדרטי.
Python# NetworkError has base RuntimeError and not Exception class NetworkError(RuntimeError): def __init__(self arg): self.args = (arg) # store as tuple try: raise NetworkError('Connection failed') except NetworkError as e: print(e.args)
תְפוּקָה
('Connection failed') הֶסבֵּר:
- NetworkError יורשת מ-RuntimeError שהוא סוג חריג מובנה.
- כאשר מועלים ההודעה מאוחסנת בתכונת args כ-tuple.
- החריג נתפס והארגומנטים המאוחסנים שלו מוצגים.
דוגמה בעולם האמיתי: שגיאת אימייל לא חוקית
Python
class InvalidEmailError(Exception): def __init__(self email msg='Invalid email format'): self.email = email self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.email} -> {self.msg}' def set_email(email): if '@' not in email: raise InvalidEmailError(email) print(f'Email set to: {email}') try: set_email('userexample.com') except InvalidEmailError as e: print(e)
תְפוּקָה
userexample.com -> Invalid email format
הֶסבֵּר:
- מחלקה חריגה חדשה InvalidEmailError מוגדרת לאימות כתובות דוא"ל.
- הבלוק try-except תופס את השגיאה ומדפיס את ההודעה המעוצבת.
מתי להשתמש בחריגים בהגדרת משתמש?
יש לשקול חריגים המוגדרים על ידי המשתמש בתרחישים הבאים:
- מייצג שגיאות ספציפיות באפליקציה (למשל InvalidAgeError DatabaseConnectionError).
- מתן הודעות שגיאה ברורות ותיאוריות יותר.