כיצד להתמודד עם חריגים בפייתון

כיצד להתמודד עם חריגים בפייתון

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





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





כאן נבחן כיצד תוכל להתמודד עם חריגים ב- Python.





כיצד פועלת טיפול חריגים ב- Python

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

אולם כדי להעלות חריג ב- Python, תגיד ל- Python לנסות להריץ בלוק קוד מסוים. אם הבלוק נכשל, תוכל לבקש מ- Python להעלות חריג מוגדר לקוד הכושל.



מתי עליך להשתמש בחריגים בתכנות פייתון?

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

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





במילים אחרות, אתה יכול להשתמש בחריגים ככלי אזהרה כדי להדריך משתמשים כיצד להשתמש בתוכנית שלך.

טיפול בחריגים של פייתון

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





רעיון הקידוד של חריגות Python בדרך כלל נראה כך:

try:
'code to be executed'
except:
'error message'

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

בעיקרו של דבר, זה שימושי אם יש לך עוד גוש קוד שאתה רוצה להריץ ברציפות בלי קשר למה שקורה בתוך נסה ... חוץ מזה לַחסוֹם.

להלן דוגמא:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

בקוד לעיל, תפעיל מחדש בבקשה פועל ברציפות, בלי קשר אם יש חריג או לא.

א אַחֵר המצב יכול גם לעקוב אחר מלבד הַצהָרָה:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

כעת נסה זאת שוב עם 'B' המוגדר:

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

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

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

החריג לעיל בודק תחילה אם יש א שם שגיאה בתוך ה לְנַסוֹת לַחסוֹם. לאחר מכן הוא מדפיס את התקן שם שגיאה יוצא מן הכלל ראשון ('שם' B 'אינו מוגדר'). ותומך בה עם חריג בכתב שלך ('צריך להגדיר B, בבקשה').

קשור: עקרונות תכנות בסיסיים שכל מתכנת חייב לדעת

צפייה בסרטים חדשים בחינם באינטרנט

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

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

מה אם החלוקה תקפה? למשל החלפה F = 7/0 בקוד לעיל עם F = 7/5 נותן:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

חריגים שהוגדרו על ידי המשתמש בפייתון

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

עם זאת, כל יוצא מן הכלל שהוגדר על ידי המשתמש (במישרין או בעקיפין) עדיין מגיע מהמובנה יוצא מן הכלל מחלקה של פייתון.

הקוד לדוגמא להלן מתייחס לבסיס יוצא מן הכלל ישירות על ידי התקשרות RuntimeError מזה:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

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

קָשׁוּר: מדריך למתחילים לביטויים רגילים באמצעות פייתון

תוכל לבצע חריג המוגדר על ידי משתמש על ידי הפקתו ישירות מה- יוצא מן הכלל מחלקת בסיס. אולם החריג להלן מונע את הפחתת 5 מ- 6 וקורא את החריגה ממעמד הבסיס ישירות:

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

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

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

כי הגדרת כעת א FloatError class, Python מעלה את זה אם תנסה להוסיף שני מילולית שאינם צפים באמצעות addtwoFloat פוּנקצִיָה.

אתה יכול להדפיס את FloatError class באותו קובץ Python שבו יצרת אותו כדי לראות מה קורה:

print(FloatError)
Output:

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

print(FloatError)
Output: NameError: name 'FloatError' is not defined

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

אתה יכול לנסות להגדיר את עצמך גם שיעורי שגיאה אחרים כדי לראות איך הם מסתדרים.

הפוך את תוכניות ה- Python שלך לידידותיות יותר למשתמש עם יוצאים מן הכלל

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

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

לַחֲלוֹק לַחֲלוֹק צִיוּץ אימייל כיצד לאתר באגים לקוד ה- Python שלך

הצטייד בידע כדי למעוך כל באג פייתון בדרכך.

קרא הבא
נושאים קשורים
  • תִכנוּת
  • פִּיתוֹן
  • הדרכות קידוד
על הסופר אידיסו אומיסולה(פורסמו 94 מאמרים)

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

עוד מאת Idowu Omisola

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים, סקירות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחצו כאן להרשמה