Tôi có một chức năng có thể trả về một trong ba điều sau:
- thành công (
True) - thất bại (
False) - lỗi đọc / phân tích luồng (
None)
Câu hỏi của tôi là, nếu tôi không được phép kiểm tra lại Truehoặc False, tôi nên xem kết quả như thế nào. Dưới đây là cách tôi hiện đang làm:
result = simulate(open("myfile"))
if result == None:
print "error parsing stream"
elif result == True: # shouldn't do this
print "result pass"
else:
print "result fail"
Là nó thực sự đơn giản như loại bỏ == Truemột phần hoặc tôi nên thêm một kiểu dữ liệu tri-bool. Tôi không muốn simulatehàm ném ngoại lệ vì tất cả những gì tôi muốn chương trình bên ngoài xảy ra với lỗi là ghi nhật ký và tiếp tục.
simulatechức năng tôi bắt tất cả các ngoại lệ; Tôi không muốn bất cứ điều gì xảy ra bên trong trình giả lập để dừng phần còn lại của chương trình đang chạy (và xử lý phần tử tiếp theo). Nhưng những câu trả lời đang khiến tôi thay đổi suy nghĩ.
simulatecó những thứ nó có thể bắt và thử lại, điều đó thật tốt. Nhưng nếu nó "thất bại", nó sẽ không trở lại None. Nó chỉ nên đưa ra một ngoại lệ cho kịch bản gọi nó. Dù bằng cách nào, đã simulatexong. Trả về Nonekhông hữu ích như đưa ra một ngoại lệ thích hợp - hoặc cho phép một ngoại lệ truyền qua simulatetập lệnh gọi để xử lý.
except Exception:thay thế. Điều này bắt tất cả các lỗi "thực", cùng với Warningvà StopIteration. Nó cho phép KeyboardInterruptvà SystemExitthông qua mặc dù. Nếu bạn thực sự muốn bắt chúng, có lẽ tốt nhất là sử dụng một cấu trúc khác, ngoại trừ hoặc một số cấu trúc khác có ghi rõ ý định của bạn, vì đó không phải là "lỗi". (Nhưng tôi đã nói "hầu như không bao giờ" ... có lẽ trong trường hợp của bạn, bạn thực sự muốn lấy tất cả mọi thứ, và thậm chí ngăn Ctrl-C hoặc sys.exit()thoát ra, v.v.)