أخطاء محددة وإعادة المحاولة بحلقة
يمكن أن يكون لكتلة try الواحدة عدة كتل except، لكل منها خطأ مختلف. يقسم البرنامج التالي 10 على عدد مكتوب. الكلمة تسبب ValueError، والقيمة المكتوبة 0 تسبب ZeroDivisionError. والرسالتان مختلفتان لأن الخطأين يحتاجان إلى نصيحتين مختلفتين. نضع الأسماء المحددة أولًا؛ والاسم العام هو Exception ولا يوجد اسم Error. وللسؤال من جديد بعد مدخل خاطئ نضع try داخل while True. فإذا كان المدخل جيدًا خرجت break من الحلقة، وإذا كان سيئًا عرضت كتلة except رسالة وبدأت الحلقة من جديد. والفكرة نفسها تعمل داخل الدوال (تذكّر الأسبوع الثامن).
1try: 2 num = int(input("Divide 10 by: ")) 3 print(10 / num) 4except ValueError: 5 print("Please type digits only.") 6except ZeroDivisionError: 7 print("You cannot divide by zero.")
Divide 10 by: 0 You cannot divide by zero.
1while True: 2 try: 3 num = int(input("Enter a number: ")) 4 print("You entered:", num) 5 break 6 except ValueError: 7 print("Numbers only, try again.")
Enter a number: abc Numbers only, try again. Enter a number: Numbers only, try again. Enter a number: 6 You entered: 6
1def to_number(text): 2 try: 3 return int(text) 4 except ValueError: 5 return 0 6 7print(to_number("12")) 8print(to_number("abc"))
12 0
1print(int("10") / int("2"))5.0
خطط لبرنامج يسأل عن عدد الأقلام ويكرر السؤال حتى يكتب المستخدم عددًا صحيحًا 1 أو أكبر. ارسم الحلقة في مخطط تدفق، واكتب الرسالتين: واحدة للكلمة وواحدة للعدد 0 أو الأقل. اختبره بالقيم المكتوبة zero و10 و3.