Thay vì gây ô nhiễm mã của bạn với try..except
ở khắp mọi nơi, bạn chỉ nên thực hiện của riêng bạn ngoại trừ móc bằng cách đặt sys.excepthook
. Dưới đây là ví dụ:
import sys
import traceback
def install_excepthook():
def my_excepthook(exctype, value, tb):
s = ''.join(traceback.format_exception(exctype, value, tb))
dialog = ErrorReportDialog(None, s)
dialog.exec_()
sys.excepthook = my_excepthook
Gọi install_exception()
khi ứng dụng của bạn bắt đầu.
ErrorReportDialog
là hộp thoại Qt tôi đã tạo. traceback.format_exception()
sẽ định dạng đối số được chuyển tới móc ngoại trừ theo cách tương tự trong trình thông dịch của Python.
CHỈNH SỬA: Tôi quên đề cập đến một chút xíu với điều đó. Nó không làm việc với các chủ đề (tốt, ít nhất là nó đã không lần cuối cùng tôi kiểm tra). Đối với mã đang chạy trong một chuỗi khác, bạn sẽ cần bọc nó trong khối try..except
.
Nguồn
2009-12-28 20:27:30
Tôi không đồng ý với tuyên bố rằng tkinter là "khá nhiều một trình bao bọc cho các ứng dụng dòng lệnh đơn giản". Tkinter là một thư viện GUI hoàn chỉnh phù hợp cho tất cả các mục đích. Và trên thực tế, Tkinter cũng có thể được sử dụng để thực hiện tất cả các tính năng trong ảnh chụp màn hình. –
Tôi không đồng ý, nhưng nếu một người làm một giao diện đầy đủ, có thể duy trì (với báo cáo sự cố và chủ đề), với nỗ lực ít nhất, người ta sẽ sử dụng một trong các bộ công cụ khác mà tôi liệt kê ở trên. Lý do họ tồn tại là vì Tkinter không đáp ứng đủ nhu cầu này. – torger