Python: Một lần thử nhiều ngoại trừ


195

Trong Python, có thể có nhiều exceptcâu lệnh cho một trycâu lệnh không? Nhu la :

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

7
@ Eva611: Đừng xin lỗi. (1) hãy thử nó. (2) gửi câu trả lời cho câu hỏi của bạn.
S.Lott

6
Nó không hoạt động. Đã thử nó với trình thông dịch python ...
Eva611

38
@ Eva611 Tôi nghĩ rằng câu hỏi của bạn là tốt. Tôi đã nhanh hơn với Google điều này hơn là thiết lập một ví dụ trong trình thông dịch Python, vì vậy tôi rất vui khi bạn hỏi. DrTysa và những người khác chỉ nên trả lời bằng "có" nhanh hơn là mắng bạn.
galarant

5
Hầu hết thời gian đoán đầu tiên của bạn sẽ sai, hoặc bỏ lỡ các sắc thái tinh tế, vì vậy (như 15.000 người khác) tôi đã thử google trước!
Chris

9
Tôi đã thử google và tìm thấy câu hỏi này. Do đó, tôi rất vui vì có người khác đã hỏi nó trong một diễn đàn công khai như SO và tôi rất vui vì những người khác liên kết với nó rằng thuật toán của google đã đưa nó lên như kết quả đầu tiên của tôi.
kingledion

Câu trả lời:


328

Vâng, nó là có thể.

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()

Xem: http://docs.python.org/tutorial/errors.html

Từ khóa "as" được sử dụng để gán lỗi cho một biến để lỗi có thể được điều tra kỹ hơn sau này trong mã. Cũng lưu ý rằng các dấu ngoặc đơn cho trường hợp ngoại lệ ba là cần thiết trong python 3. Trang này có thêm thông tin: Bắt nhiều ngoại lệ trong một dòng (ngoại trừ khối)


76
Nếu bạn muốn làm điều tương tự trong cả hai trường hợp, thì đó là except (SomeError, OtherError):. Không trả lời câu hỏi OP, nhưng có thể giúp một số người đến đây thông qua Google.
Đánh dấu

Ví dụ, nếu bạn phải chuyển đổi nhiều phiên bản của cấu trúc dữ liệu sang cấu trúc mới, thì khi cập nhật các phiên bản mã chẳng hạn, bạn có thể lồng thử try..ex chấp nhận.
Rolf of Sachsen

5
Nếu bạn muốn xử lý tất cả các ngoại lệ, bạn nên sử dụng except Exception:thay vì đơn giản except:. (Đồng bằng ngoại trừ sẽ bắt được chẵn SystemExitKeyboardInterruptthường không phải là điều bạn muốn)
polvoazul

Bạn có lẽ muốn làm điều gì đó với ecũng kể từ khi bạn cung cấp cho nó một cái tên :)
HelloGoodbye
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.