วิธีจัดการกับข้อยกเว้นใน Python

วิธีจัดการกับข้อยกเว้นใน Python

การจัดการข้อยกเว้นคือความสามารถในการปรับแต่งและแสดงข้อความแสดงข้อผิดพลาดสำหรับส่วนต่างๆ ของโปรแกรมที่ไม่สามารถทำงานได้





ไม่ว่าคุณจะกำลังสร้างเว็บไซต์ สร้าง API โมดูล หรือผลิตภัณฑ์อื่นๆ โดยใช้ Python ความสามารถของคุณในการจัดการข้อยกเว้นอย่างมีประสิทธิภาพจะช่วยให้คุณสามารถระบุสาเหตุของข้อผิดพลาดได้อย่างชัดเจน





ที่นี่ เราจะมาดูกันว่าคุณสามารถจัดการกับข้อยกเว้นใน Python ได้อย่างไร





วิธีการจัดการข้อยกเว้นใน Python

เมื่อคุณแจ้งข้อยกเว้น คุณกำลังบอกให้ Python แสดงข้อความทุกครั้งที่บล็อกของโค้ดล้มเหลว การจัดการข้อยกเว้นก็เหมือนกับการบอกให้ใครสักคนลองยกน้ำหนัก และหากทำไม่ได้ ก็ควรแจ้งให้คุณทราบ

อย่างไรก็ตาม ในการยกข้อยกเว้นใน Python คุณจะต้องบอกให้ Python พยายามเรียกใช้บล็อกโค้ดเฉพาะ หากบล็อกนั้นล้มเหลว คุณสามารถขอให้ Python เพิ่มข้อยกเว้นที่กำหนดไว้สำหรับโค้ดที่ล้มเหลวได้



คุณควรใช้ข้อยกเว้นในการเขียนโปรแกรม Python เมื่อใด

ในโอกาสส่วนใหญ่ คุณสามารถปิดบังข้อผิดพลาด Python มาตรฐานได้โดยใช้ข้อยกเว้น แต่คุณต้องระมัดระวังตัวอยู่เสมอ เนื่องจากการทำเช่นนี้อาจทำให้เกิดปัญหาการดีบักได้ ดังนั้น คุณอาจพบว่าเป็นการยากที่จะหาสาเหตุที่แท้จริงของจุดบกพร่องในท้ายที่สุด

ดังนั้น คุณควรใช้ข้อยกเว้นเมื่อคุณได้ทดสอบโค้ดของคุณเพียงพอแล้ว และคุณมั่นใจว่าโค้ดใช้งานได้จริง ท้ายที่สุด แนวทางปฏิบัติที่ดีที่สุดคือใช้เพื่อจัดการกับข้อบกพร่องที่อาจเกิดขึ้นจากจุดสิ้นสุดของผู้ใช้ แทนที่จะเป็นตัวโค้ดเอง





กล่าวอีกนัยหนึ่ง คุณสามารถใช้ข้อยกเว้นเป็นเครื่องมือเตือนเพื่อแนะนำผู้ใช้เกี่ยวกับวิธีการใช้โปรแกรมของคุณ

การจัดการข้อยกเว้น Python

ในการจัดการข้อยกเว้นใน Python คุณต้องแรปโค้ดใน a . ก่อน ลอง...ยกเว้น บล็อก. ในบางครั้ง คุณอาจต้องใส่ a ในที่สุด คำสั่งเพื่อจัดการกับการดำเนินการเพิ่มเติมขึ้นอยู่กับความต้องการของคุณ





แนวคิดการเข้ารหัสของข้อยกเว้น 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

ข้อยกเว้นข้างต้นจะตรวจสอบว่ามี a . หรือไม่ ชื่อผิดพลาด ใน ลอง บล็อก. แล้วพิมพ์มาตรฐาน ชื่อผิดพลาด ข้อยกเว้นก่อน (ไม่ได้กำหนด 'ชื่อ 'B') และสนับสนุนด้วยข้อยกเว้นเป็นลายลักษณ์อักษรของคุณ ('ต้องกำหนด B โปรด')

ที่เกี่ยวข้อง: หลักการเขียนโปรแกรมขั้นพื้นฐานที่โปรแกรมเมอร์ทุกคนต้องรู้

สินค้า amazon ไม่เคยมาถึงแต่บอกว่าส่งแล้ว

และถ้าคุณต้องการจัดการกับข้อยกเว้น คุณสามารถติดตาม a . ได้ ลอง บล็อกที่มีมากมาย ยกเว้น งบ. สิ่งนี้ค่อนข้างสะดวกถ้าคุณ ลอง block มีข้อยกเว้นหลายประการ:

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

ข้อยกเว้นที่ผู้ใช้กำหนดใน Python

คุณสามารถสร้างข้อยกเว้นได้เช่นกันและโทรหาพวกเขาในภายหลังในโปรแกรมของคุณ วิธีนี้ช่วยให้คุณให้คำอธิบายเฉพาะของข้อยกเว้นและตั้งชื่อตามที่คุณต้องการ

อย่างไรก็ตาม ทุกข้อยกเว้นที่ผู้ใช้กำหนด (โดยตรงหรือโดยอ้อม) ยังคงมาจาก built-in ข้อยกเว้น คลาสของไพทอน

โค้ดตัวอย่างด้านล่างอ้างอิงถึงฐาน ข้อยกเว้น โดยตรงโดยโทร การทำงานผิดพลาด จากมัน:

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

สังเกตว่า การเชื่อมต่อล้มเหลว ในกรณีนี้ เป็นคลาสที่ผู้ใช้กำหนด ซึ่งคุณสามารถเพิ่มได้ทุกเมื่อที่คุณต้องการในโปรแกรมของคุณ

ที่เกี่ยวข้อง: คู่มือสำหรับผู้เริ่มต้นใช้งานนิพจน์ทั่วไปด้วย Python

คุณสามารถสร้างข้อยกเว้นที่ผู้ใช้กำหนดโดยรับโดยตรงจาก ข้อยกเว้น คลาสพื้นฐาน อย่างไรก็ตาม ข้อยกเว้นด้านล่างป้องกันการลบ 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

ในทางปฏิบัติ คุณสามารถใช้ข้อยกเว้นที่คุณกำหนดไว้ก่อนหน้านี้โดยเรียกใช้ในฟังก์ชันอื่น ตัวอย่างเช่น คุณสามารถสร้าง a 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')

เพราะตอนนี้คุณได้กำหนด a FloatError คลาส Python จะเพิ่มมันหากคุณพยายามเพิ่มตัวอักษรที่ไม่ลอยสองตัวโดยใช้ addtwoFloat การทำงาน.

คุณสามารถพิมพ์ FloatError class ในไฟล์ Python เดียวกันกับที่คุณสร้างขึ้นเพื่อดูว่าเกิดอะไรขึ้น:

print(FloatError)
Output:

FloatError อย่างไรก็ตาม ไม่ใช่ข้อยกเว้น Python ในตัว คุณสามารถตรวจสอบได้โดยโทร FloatError ในไฟล์ Python ใหม่ที่คุณไม่ได้สร้างคลาสนี้:

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

คุณจะได้รับ ชื่อผิดพลาด เพราะ Python ไม่รู้จักว่าเป็นข้อยกเว้นมาตรฐาน

คุณสามารถลองกำหนดคลาสข้อผิดพลาดอื่น ๆ ด้วยตัวเองเพื่อดูว่ามันทำงานอย่างไร

ทำให้โปรแกรม Python ของคุณใช้งานง่ายขึ้นด้วยข้อยกเว้น

มีข้อยกเว้นมาตรฐานมากมายใน Python แต่คุณสามารถกำหนดของคุณได้เช่นกัน อย่างไรก็ตาม ความง่ายในการใช้โปรแกรมของคุณนั้นขึ้นอยู่กับระดับหนึ่งว่าจะจัดการกับข้อยกเว้นต่างๆ อย่างไร (ไม่ว่าจะเป็นแบบกำหนดโดยผู้ใช้

อย่างไรก็ตาม มีข้อยกเว้นให้คุณกำหนดว่าโปรแกรมของคุณควรทำงานอย่างไรเมื่อผู้ใช้โต้ตอบกับพวกเขา การระบุสาเหตุของข้อผิดพลาดอย่างชัดเจนและรัดกุมยังช่วยให้ผู้ใช้ทราบล่วงหน้าเกี่ยวกับสิ่งที่พวกเขาทำผิด และบางครั้งก็ชี้นำพวกเขาไปในทิศทางที่ถูกต้อง

แบ่งปัน แบ่งปัน ทวีต อีเมล วิธีดีบักโค้ด Python ของคุณ

เตรียมความรู้ในการสควอชทุกจุดบกพร่องของ Python ในเส้นทางของคุณ

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • การเขียนโปรแกรม
  • Python
  • บทเรียนการเข้ารหัส
เกี่ยวกับผู้เขียน อิดิโซ โอมิโซลา(94 บทความที่ตีพิมพ์)

Idowu หลงใหลเกี่ยวกับเทคโนโลยีอัจฉริยะและประสิทธิภาพการทำงานทุกอย่าง ในเวลาว่าง เขาเล่นไปรอบๆ กับการเขียนโค้ดและเปลี่ยนไปเล่นกระดานหมากรุกเมื่อรู้สึกเบื่อ แต่เขาก็ชอบที่จะแยกตัวออกจากงานประจำบ้างเป็นบางครั้ง ความหลงใหลในการแสดงให้ผู้คนได้รู้จักเทคโนโลยีสมัยใหม่กระตุ้นให้เขาเขียนมากขึ้น

เพิ่มเติมจาก Idowu Omisola

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก