Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ข้อยกเว้นของ Python:A Guide

ตัวแปล 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 อย่างมืออาชีพแล้ว!