Tôi có một số cách hiểu danh sách bằng Python trong đó mỗi lần lặp có thể đưa ra một ngoại lệ.
Ví dụ , nếu tôi có:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
Tôi sẽ nhận được một ZeroDivisionError
ngoại lệ trong phần tử thứ 3.
Làm cách nào tôi có thể xử lý ngoại lệ này và tiếp tục thực hiện việc hiểu danh sách?
Cách duy nhất tôi có thể nghĩ đến là sử dụng một hàm trợ giúp:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Nhưng điều này trông hơi rườm rà với tôi.
Có cách nào tốt hơn để làm điều này bằng Python không?
Lưu ý: Đây là một ví dụ đơn giản (xem " ví dụ " ở trên) mà tôi đã lấy vì ví dụ thực của tôi yêu cầu một số ngữ cảnh. Tôi không quan tâm đến việc tránh lỗi chia cho 0 nhưng trong việc xử lý các trường hợp ngoại lệ trong việc hiểu danh sách.
ndarray
với các cài đặt thích hợp trong np.seterr
. Điều đó sẽ dẫn đến 1/0 = nan
. Nhưng tôi nhận ra rằng điều đó không khái quát cho các tình huống khác khi nhu cầu này phát sinh.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Nhưng nó vẫn ở chế độ nháp. Cảm giác gan ruột của tôi là nó sẽ không được chấp nhận. Biểu thức Imho có thể trở nên quá lộn xộn (kiểm tra nhiều ngoại lệ, có nhiều kết hợp phức tạp hơn (nhiều toán tử logic, hiểu phức tạp, v.v.)