ฉันจะจับข้อยกเว้นหลายข้อในหนึ่งบรรทัดได้อย่างไร (ยกเว้นบล็อก)
ทำเช่นนี้:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
ต้องใช้วงเล็บเนื่องจากไวยากรณ์เก่ากว่านั้นใช้เครื่องหมายจุลภาคเพื่อกำหนดวัตถุข้อผิดพลาดให้กับชื่อ as
คำหลักที่จะใช้สำหรับการที่ได้รับมอบหมาย คุณสามารถใช้ชื่อใด ๆ สำหรับวัตถุข้อผิดพลาดฉันชอบerror
เป็นการส่วนตัว
ปฏิบัติที่ดีที่สุด
ในการทำเช่นนี้ในปัจจุบันและไปข้างหน้าเข้ากันได้กับ Python คุณจะต้องแยกข้อยกเว้นด้วยเครื่องหมายจุลภาคและล้อมด้วยเครื่องหมายวงเล็บเพื่อแยกความแตกต่างจากไวยากรณ์ก่อนหน้านี้ที่กำหนดอินสแตนซ์ข้อยกเว้นให้กับชื่อตัวแปรโดยทำตามประเภทข้อยกเว้น จุลภาค
นี่คือตัวอย่างของการใช้งานง่าย:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
sys.exit(0)
ฉันกำลังระบุข้อยกเว้นเหล่านี้เท่านั้นเพื่อหลีกเลี่ยงการซ่อนข้อบกพร่องซึ่งถ้าฉันพบฉันคาดหวังว่าการติดตามสแต็กเต็มจาก
เอกสารนี้มีไว้ที่นี่: https://docs.python.org/tutorial/errors.html
คุณสามารถกำหนดข้อยกเว้นให้กับตัวแปร ( e
เป็นเรื่องปกติ แต่คุณอาจต้องการตัวแปร verbose เพิ่มเติมถ้าคุณมีการจัดการข้อยกเว้นที่ยาวนานหรือ IDE ของคุณเน้นเฉพาะการเลือกที่ใหญ่กว่านั้นเช่นเดียวกับที่ทำ) ตัวอย่างเช่นมีแอตทริบิวต์ args นี่คือตัวอย่าง:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
sys.exit(0)
โปรดสังเกตว่าใน Python 3 err
วัตถุจะไม่อยู่ในขอบเขตเมื่อexcept
สรุปได้ว่าบล็อก
เลิก
คุณอาจเห็นรหัสที่กำหนดข้อผิดพลาดด้วยเครื่องหมายจุลภาค การใช้งานนี้เป็นรูปแบบเดียวที่มีอยู่ใน Python 2.5 และรุ่นก่อนหน้านี้ซึ่งเลิกใช้แล้วและหากคุณต้องการให้โค้ดของคุณทำงานร่วมกันได้ใน Python 3 คุณควรอัปเดตไวยากรณ์เพื่อใช้รูปแบบใหม่:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
sys.exit(0)
หากคุณเห็นการกำหนดชื่อเครื่องหมายจุลภาคใน codebase ของคุณและคุณใช้ Python 2.5 หรือสูงกว่าให้เปลี่ยนไปใช้วิธีใหม่ในการทำเพื่อให้รหัสของคุณยังคงใช้งานร่วมกันได้เมื่อคุณอัปเกรด
suppress
ผู้จัดการบริบท
คำตอบที่ยอมรับคือรหัส 4 บรรทัดขั้นต่ำ:
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
try
, except
, pass
สายสามารถจัดการได้ในบรรทัดเดียวกับผู้จัดการบริบทปราบที่มีอยู่ใน Python 3.4 :
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
ดังนั้นเมื่อคุณต้องการที่จะอยู่กับข้อยกเว้นบางอย่างใช้pass
suppress