Python: ลองหลายครั้งยกเว้น


199

ใน Python เป็นไปได้ไหมที่จะมีหลายexceptstatement สำหรับหนึ่งtrystatement เช่น:

try:
 #something1
 #something2
except ExceptionType1:
 #return xyz
except ExceptionType2:
 #return abc

7
@ Eva611: อย่าขอโทษ (1) ลอง (2) โพสต์คำตอบสำหรับคำถามของคุณ
S.Lott

6
มันใช้งานได้ดี พยายามกับล่ามหลาม ...
Eva611

39
@ Eva611 ฉันคิดว่าคำถามของคุณไม่เป็นไร เร็วกว่านี้สำหรับฉันสำหรับ Google แทนที่จะเป็นตัวอย่างใน Python interpreter ดังนั้นฉันจึงดีใจที่คุณถาม DrTysa และคนอื่น ๆ ควรจะตอบกลับด้วย "ใช่" อย่างรวดเร็วมากกว่าที่จะดุคุณ
galarant

5
ส่วนใหญ่การเดาครั้งแรกของคุณจะผิดหรือพลาดไปเล็กน้อยดังนั้น (เหมือน 15,000 คนอื่น) ฉันลอง google ก่อน!
Chris

9
ฉันลองใช้ google และพบคำถามนี้ ดังนั้นฉันดีใจที่มีคนอื่นถามในที่สาธารณะเพื่อให้เป็นฟอรัมและฉันดีใจที่คนอื่น ๆ เชื่อมโยงกับอัลกอริทึมของ google ที่โผล่ขึ้นมาเป็นผลลัพธ์แรกของฉัน
kingledion

คำตอบ:


332

ใช่มันเป็นไปได้

try:
   ...
except FirstException:
   handle_first_one()

except SecondException:
   handle_second_one()

except (ThirdException, FourthException, FifthException) as e:
   handle_either_of_3rd_4th_or_5th()

except Exception:
   handle_all_other_exceptions()

ดู: http://docs.python.org/tutorial/errors.html

คีย์เวิร์ด "as" ใช้เพื่อกำหนดข้อผิดพลาดให้กับตัวแปรเพื่อให้สามารถตรวจสอบข้อผิดพลาดได้อย่างละเอียดมากขึ้นในภายหลังในรหัส นอกจากนี้โปรดทราบว่าต้องใช้วงเล็บในกรณียกเว้นสามกรณีในหลาม 3 หน้านี้มีข้อมูลเพิ่มเติม: ตรวจจับข้อยกเว้นหลายรายการในหนึ่งบรรทัด (ยกเว้นบล็อก)


78
except (SomeError, OtherError):หากคุณต้องการที่จะทำในสิ่งเดียวกันในทั้งสองกรณีก็ ไม่ตอบคำถาม OP แต่อาจช่วยบางคนที่มาที่นี่ผ่าน Google
ทำเครื่องหมาย

หากตัวอย่างเช่นคุณต้องแปลงโครงสร้างข้อมูลหลาย ๆ รุ่นเป็นโครงสร้างใหม่เมื่อทำการอัปเดตรหัสเวอร์ชันคุณสามารถซ้อนลอง .. ยกเว้น
Rolf of Saxony

5
หากคุณต้องการที่จะจัดการกับข้อยกเว้นสิ่งที่คุณควรจะใช้แทนธรรมดาexcept Exception: except:(ธรรมดายกเว้นจะจับได้SystemExitและKeyboardInterruptซึ่งมักจะไม่ใช่สิ่งที่คุณต้องการ)
polvoazul

คุณอาจต้องการทำบางสิ่งบางอย่างด้วยeเช่นกันเนื่องจากคุณตั้งชื่อ :)
HelloGoodbye
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.