ตัวแปล Python สามารถยกข้อยกเว้นขึ้นได้และดำเนินการด้วยตนเอง ข้อยกเว้นในตัวช่วยตรวจจับข้อผิดพลาดทั่วไปในโปรแกรม
ในคู่มือนี้ เราจะพูดถึงข้อยกเว้นคืออะไรและใช้อย่างไร เราจะอธิบายตัวอย่างวิธีแจ้งข้อยกเว้น เพื่อให้คุณทำงานกับข้อยกเว้นในโค้ดได้
ข้อยกเว้นคืออะไร
ข้อยกเว้น หรือที่เรียกว่าข้อผิดพลาดทางตรรกะ คือข้อผิดพลาดที่เกิดขึ้นระหว่างรันไทม์ของโปรแกรม
มีข้อผิดพลาดสองประเภทใน Python:ข้อผิดพลาดทางไวยากรณ์และข้อผิดพลาดรันไทม์ ข้อผิดพลาดทางไวยากรณ์เกิดขึ้นก่อนที่โปรแกรมจะทำงาน หากโปรแกรมของคุณพบข้อผิดพลาดทางไวยากรณ์ โปรแกรมของคุณจะไม่สามารถเรียกใช้ได้ เนื่องจาก Python ไม่สามารถตีความโค้ดที่มีข้อผิดพลาดทางไวยากรณ์ได้
พบข้อผิดพลาดรันไทม์หรือที่เรียกว่าข้อยกเว้นในขณะที่ Python รันโปรแกรม อาจมีข้อยกเว้นในบรรทัดที่ 30 ของโปรแกรม หากเกิดข้อยกเว้นในบรรทัดที่ 30 โค้ด 30 บรรทัดจะทำงาน โปรแกรมจะหยุด
นี่คือตัวอย่างข้อยกเว้น:
Traceback (most recent call last): File "main.py", line 6, in <module> s_names.append(n) AttributeError: 'str' object has no attribute 'append'
ข้อยกเว้นนี้บอกเราว่า Python ไม่สามารถเรียกใช้โค้ดที่เหลือของเราได้ หากคุณพบข้อยกเว้น คุณควรอ่านข้อความอย่างระมัดระวัง ข้อความแสดงข้อผิดพลาดจะบอกคุณส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) เกี่ยวกับสิ่งที่คุณต้องรู้เพื่อแก้ไขข้อผิดพลาด
มาทำลายประโยคสุดท้ายในข้อความแสดงข้อผิดพลาดของเรา:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
AttributeError:วัตถุ 'str' ไม่มีแอตทริบิวต์ 'ผนวก'
ในกรณีนี้ เราทราบดีว่าข้อผิดพลาดของเราคือ AttributeError ซึ่งหมายความว่าเรากำลังพยายามอ้างอิงแอตทริบิวต์ที่ไม่มีอยู่ ข้อความแสดงข้อผิดพลาดบอกเราว่าเรากำลังพยายามใช้ append() บนวัตถุสตริงซึ่งไม่ได้รับอนุญาต
เนื่องจากวัตถุสตริงไม่รองรับ append()
วิธีการ ขั้นตอนต่อไปที่ดีคือการมองหา append()
. ที่เทียบเท่า สำหรับสตริง นี่คือการต่อกัน ตอนนี้เรามีวิธีแก้ปัญหาที่เป็นไปได้สำหรับปัญหาการเขียนโปรแกรมของเราแล้วที่เรานำไปใช้ได้
ฉันจะพบข้อยกเว้นได้ที่ไหน
เพื่อช่วยโปรแกรมเมอร์ตรวจจับข้อผิดพลาดในโค้ด Python มีข้อยกเว้นในตัวมากมาย ข้อยกเว้นเหล่านี้สามารถช่วยคุณระบุสาเหตุของปัญหาในโค้ดของคุณ เพื่อให้คุณแก้ไขได้ ด้านล่างนี้คือข้อยกเว้นทั่วไปบางส่วนที่คุณน่าจะพบ:
- TypeError:เกิดขึ้นเมื่อคุณใช้ฟังก์ชันกับวัตถุที่ประเภทไม่สนับสนุนฟังก์ชันนั้น (เช่น TypeError:สามารถเข้าร่วม iterable เท่านั้น)
- SyntaxError:เกิดขึ้นก่อนที่โปรแกรมจะทำงานเพื่อแจ้งให้คุณทราบว่าไวยากรณ์ของคุณมีปัญหา (เช่น SyntaxError:ไวยากรณ์ไม่ถูกต้อง)
- KeyError:เกิดขึ้นหากคุณอ้างอิงคีย์ในพจนานุกรมที่ไม่มีอยู่ (เช่น KeyError:“usb_ports”)
- ImportError:เกิดขึ้นหากคุณพยายามนำเข้าแพ็คเกจที่ไม่มีอยู่ หรือฟังก์ชันจากแพ็คเกจที่ไม่มีอยู่
เราได้ระบุข้อยกเว้นบางประการที่คุณอาจพบในภาษา Python
วิธีเพิ่มข้อยกเว้น
คุณสามารถกำหนดข้อยกเว้นที่กำหนดเองได้ในโค้ดของคุณ สิ่งนี้มีประโยชน์หากข้อยกเว้นในตัวของ Python ไม่ตรงกับความต้องการของโปรแกรมของคุณ
เราจะเขียนโปรแกรมที่ตรวจสอบรหัสผ่านสำหรับเกม ในการเริ่มต้น ให้ขอให้ผู้ใช้ใส่รหัสผ่าน:
password = input("Enter a password: ")
เพื่อให้รหัสผ่านของผู้ใช้ถูกต้อง รหัสผ่านต้องมีความยาวมากกว่า 12 อักขระ หากรหัสผ่านของผู้ใช้มีอักขระไม่เกิน 12 ตัว เราต้องการยกข้อยกเว้น
ในการทำเช่นนี้ เราจะใช้คำสั่ง if คำสั่ง if ต่อไปนี้จะตรวจสอบว่ารหัสผ่านที่ผู้ใช้เลือกมีน้อยกว่า 12 อักขระหรือไม่:
if len(password) > 12: print("Your password is valid.") else: raise Exception("Your password is not the correct length.")
เราใช้เมธอด len() เพื่อคำนวณความยาวของรหัสผ่านของผู้ใช้ หากผู้ใช้ใส่รหัสผ่านที่ไม่ถูกต้อง โปรแกรมของเราจะแสดงข้อยกเว้นโดยมีข้อความระบุว่า "รหัสผ่านของคุณมีความยาวไม่ถูกต้อง"
ลองใช้รหัสของเราเพื่อดูว่าใช้งานได้หรือไม่:
Enter a password: Bacon120 Traceback (most recent call last): File "main.py", line 6, in <module> raise Exception("Your password is not the correct length.") Exception: Your password is not the correct length.
รหัสผ่านที่เราป้อนมีอักขระไม่เกิน 12 ตัว รหัสของเราหยุดลงเนื่องจากเราป้อนรหัสผ่านที่ไม่ถูกต้อง มาลองรันโปรแกรมของเราด้วยรหัสผ่านที่ถูกต้องกัน:
Enter a password: Bacon120Bacon120 Your password is valid.
โปรแกรมของเราดำเนินการได้สำเร็จ
วิธีจัดการกับข้อยกเว้น
โดยค่าเริ่มต้น ข้อยกเว้นจะหยุดการทำงานของโปรแกรม แม้ว่าสิ่งนี้จะมีประโยชน์เพราะจะบังคับให้คุณค้นหาวิธีแก้ไขข้อผิดพลาด แต่ก็มีบางกรณีที่คุณอาจไม่ต้องการให้โปรแกรมของคุณหยุดการทำงานหากมีข้อยกเว้นเกิดขึ้น
ตัวอย่างเช่น หากคุณกำลังตรวจสอบว่าจุดข้อมูลในรายการนั้นถูกต้องหรือไม่ คุณอาจไม่ต้องการให้มีข้อยกเว้นขึ้นทุกครั้งที่มีการค้นพบจุดข้อมูลที่ไม่ถูกต้อง
ในการจัดการข้อยกเว้น คุณสามารถใช้บล็อก "ลอง...ยกเว้น" มาเขียนโปรแกรมหารายการในพจนานุกรมกัน พจนานุกรมนี้มีรายชื่อนักเรียนในชั้นเรียนและผลการเรียนที่ตรงกันในการทดสอบครั้งล่าสุด
ในการเริ่มต้น ให้กำหนดพจนานุกรมด้วยข้อมูลนักเรียนและเกรด:
data = { "Lucy": 73, "Carlton": 59, "Adam": 73 }
ต่อไป ขอให้ผู้ใช้ใส่ชื่อที่ต้องการเรียกเกรด เราจะทำสิ่งนี้ภายในบล็อก "ลอง" เพื่อให้เราสามารถจัดการกับข้อยกเว้นในโค้ดของเราในภายหลัง:
try: student = input("Enter the name of the student whose grade you want to retrieve: ") print(data[student])
รหัสนี้จะพิมพ์เกรดของนักเรียนที่มีชื่อตรงกับที่ผู้ใช้ได้แทรกลงในโปรแกรม อย่างไรก็ตาม หากผู้ใช้ใส่ชื่อที่ไม่ถูกต้อง จะพบ KeyError
เราจะจัดการกับสิ่งนี้โดยเพิ่มบล็อกยกเว้นในโค้ดของเรา:
try: student = input("Enter the name of the student whose grade you want to retrieve: ") print(data[student]) except: print("This student is not present in the list of grades.")
หากไม่พบนักเรียน ประโยคยกเว้น จะถูกดำเนินการ เรียกใช้โปรแกรมของเรา:
Enter the name of the student whose grade you want to retrieve: Lucy 73
เมื่อเราป้อนชื่อนักเรียนที่ถูกต้อง โปรแกรมของเราใช้งานได้ ลองใช้โปรแกรมของเราถ้าเราใส่ชื่อนักเรียนที่ไม่ถูกต้อง:
Enter the name of the student whose grade you want to retrieve: Kaitlin This student is not present in the list of grades.
มีข้อยกเว้นเกิดขึ้น แต่โปรแกรมของเราไม่หยุด เนื้อหาของบล็อก "ยกเว้น" จะถูกดำเนินการแทน
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการลอง…ยกเว้นบล็อก อ่านคำแนะนำเกี่ยวกับ Python ลอง…ยกเว้น
บทสรุป
ข้อยกเว้นแจ้งให้คุณทราบว่ามีข้อผิดพลาดทางตรรกะในรหัสของคุณ เมื่อมีการยกข้อยกเว้น คุณควรเห็นชนิดของข้อยกเว้น ที่ยกข้อยกเว้น ตลอดจนข้อความแสดงข้อผิดพลาด คุณสามารถใช้ข้อมูลนี้เพื่อค้นหาสาเหตุของข้อยกเว้น
คุณสามารถยกข้อยกเว้นของคุณเองได้โดยใช้คำสั่งยก คุณสามารถจัดการกับข้อยกเว้นได้โดยใช้การลอง…ยกเว้นบล็อกของรหัส
ตอนนี้คุณมีเครื่องมือที่จำเป็นในการแก้ปัญหา Python อย่างมืออาชีพแล้ว!