Evita que wxPython muestre el cuadro de diálogo 'Excepción no controlada'
-
03-07-2019 - |
Pregunta
Tengo una aplicación de GUI compleja escrita en Python y wxPython.
Quiero que esté certificado para Windows Vista, por lo que tiene que bloquearse de manera que se abra el cuadro de diálogo Informe de errores de Windows (el que pregunta " ¿Desea enviar un informe a Microsoft? ") aparecer. Esto es relevante para el caso de prueba nº 32 de " Certificado para casos de prueba de Windows Vista " documento.
Desafortunadamente, cuando bloqueo mi aplicación con la herramienta ThreadHijacker
, wxPython muestra un mensaje como:
Unhandled exception --------------------------- An unhandled exception occurred. Press "Abort" to terminate the program, "Retry" to exit the program normally and "Ignore" to try to continue. --------------------------- Abort Retry Ignore
¿Cómo puedo evitar que wxPython muestre este mensaje? Tengo un sys.excepthook
personalizado, pero parece que este cuadro de diálogo se muestra antes de que mi enganche de excepción pueda interferir.
EDITAR:
Otros consejos
Si recuerdo correctamente, esto es un retén (...) en el nivel superior (wxApp) en wxWidgets. Puede usar un Controlador de excepciones vectorizado o _set_se_translator () para obtener un primer disparo de la Excepción estructurada, y salir a WER, es decir, ReportFault () desde allí.
¿Es posible que usted solo maneje todo? Supongo que tendría que intentarlo: excepto: bloquear todos los métodos enlazados a un widget. Podrías escribir un decorador:
def catch_exception(f):
def safe(*args, **kw):
try:
f(*args, **kw)
except Exception, e:
handle_exception(e)
return safe
def handle_exception(e):
# do Vista stuff
sys.exit()
Luego decora cualquier función que pueda ser llamada por mainloop (ya que supongo que es donde wxPython hace su propia captura).