[pygtk] How to stop mainloop from catching exceptions
Aaron Optimizer Digulla
digulla@hepe.com
Thu, 20 Jul 2000 18:07:55 +0200
This message is in MIME format.
---MOQ964109275fae91be2739e43bd609277fa96173fc2
Content-Type: text/plain
Content-Transfer-Encoding: 8bit
Quoting Aaron Optimizer Digulla <digulla@hepe.com>:
> I'm currently working on a patch for pygtk-0.6.5 which will call
> a user-callback in case of an error. That would allow to open a
> window with a trace instead of silently dying.
Ok, here is the patch. It will add a function
"pygtk_set_exception_handler" to gtk.py which allows to specify a
function or method (anything callable) which will be called when
an exception occurrs. Try this:
import os
os.environ['PYGTK_FATAL_EXCEPTIONS'] = '1'
def handler ():
import traceback
print 'GOTCHA'
traceback.print_exc ()
mainquit ()
pygtk_set_exception_handler (handler)
pygtk_set_exception_handler() will return the last installed
handler, so you can implement a stack if you want/need that.
The C code which calls the handler has a fallback mode. If
there are errors calling the handler (for example, an exception
in the handler), it will default to the old behaviour. There is
just one thing different: When the env variable PYGTK_FATAL_EXCEPTIONS
is set, then it will still print the exception and *then* it
will abort (the current code will just silently exit so you will
never know what happened).
Have fun,
--
==============================================
Sowatec AG, CH-8330 Pfäffikon (ZH)
Witzbergstr. 7, http://www.sowatec.com
Tel: +41-(0)1-952 55 55
Fax: +41-(0)1-952 55 66
----------------------------------------------
Aaron "Optimizer" Digulla, digulla@sowatec.com
==============================================
---MOQ964109275fae91be2739e43bd609277fa96173fc2
Content-Type: application/octet-stream; name="exception_handler.patch"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="exception_handler.patch"
KioqIGd0ay5weS5vcmlnCVRodSBKdWwgMjAgMTc6NDM6MDQgMjAwMAotLS0gZ3RrLnB5CVRodSBK
dWwgMjAgMTc6NDM6MTcgMjAwMAoqKioqKioqKioqKioqKioKKioqIDI3ODQsMjc4NiAqKioqCi0t
LSAyNzg0LDI3OTAgLS0tLQogIAlyZXR1cm4gX2d0ay5nZGtfd2luZG93X2ZvcmVpZ25fbmV3KHhp
ZCkKICBkZWYgX3Jvb3Rfd2luZG93KCk6CiAgCXJldHVybiBfZ3RrLmdka19nZXRfcm9vdF93aW4o
KQorIAorIGRlZiBweWd0a19zZXRfZXhjZXB0aW9uX2hhbmRsZXIgKGhhbmRsZXIpOgorICAgICBy
ZXR1cm4gX2d0ay5weWd0a19zZXRfZXhjZXB0aW9uX2hhbmRsZXIgKGhhbmRsZXIpCisgCioqKiBn
dGttb2R1bGUuYy5vcmlnCVRodSBKdWwgMjAgMTY6Mzk6MjcgMjAwMAotLS0gZ3RrbW9kdWxlLmMJ
VGh1IEp1bCAyMCAxNzozMDoxOSAyMDAwCioqKioqKioqKioqKioqKgoqKiogMzE4MiwzMTg3ICoq
KioKLS0tIDMxODIsMzIzMyAtLS0tCiAgICByZXR1cm4gMDsKICB9CiAgCisgCisgc3RhdGljIFB5
T2JqZWN0ICpleGNlcHRpb25IYW5kbGVyID0gTlVMTDsKKyAKKyBzdGF0aWMgdm9pZCBIYW5kbGVF
eGNlcHRpb24gKHZvaWQpIHsKKyAgICAgaWYgKGV4Y2VwdGlvbkhhbmRsZXIgIT0gUHlfTm9uZSkg
eworIAlQeU9iamVjdCAqIGFyZ3MsICogcmVzdWx0OworIAlpbnQgaXNUcnVlOworIAorIAlhcmdz
ID0gUHlUdXBsZV9OZXcoMCk7CisgCWlmICghYXJncykKKyAJICAgIGdvdG8gZXJyb3I7CisgCXJl
c3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0IChleGNlcHRpb25IYW5kbGVyLCBhcmdzKTsKKyAJaWYg
KCFyZXN1bHQpCisgCSAgICBnb3RvIGVycm9yOworIAlQeV9ERUNSRUYoYXJncyk7CisgCWlzVHJ1
ZSA9IFB5T2JqZWN0X0lzVHJ1ZSAocmVzdWx0KTsKKyAJUHlfREVDUkVGKHJlc3VsdCk7CisgCWlm
ICghaXNUcnVlKQorIAkgICAgZ290byBlcnJvcjsKKyAgICAgfSBlbHNlIHsKKyBlcnJvcjoKKyAJ
UHlFcnJfUHJpbnQoKTsKKyAJUHlFcnJfQ2xlYXIoKTsKKyAKKyAJaWYgKFB5R3RrX0ZhdGFsRXhj
ZXB0aW9ucykKKyAJICAgIGd0a19tYWluX3F1aXQoKTsKKyAgICAgfQorIH0KKyAKKyBzdGF0aWMg
UHlPYmplY3QgKiBQeUd0a19TZXRFeGNlcHRpb25IYW5kbGVyIChQeU9iamVjdCAqIHNlbGYsCisg
CSAgICBQeU9iamVjdCAqIGFyZ3MpCisgeworICAgICBQeU9iamVjdCAqIHJlc3VsdCA9IE5VTEws
ICogdGVtcDsKKyAKKyAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86UHlHdGtfU2V0
RXhjZXB0aW9uSGFuZGxlciIsICZ0ZW1wKSkgeworIAlpZiAodGVtcCAhPSBQeV9Ob25lICYmICFQ
eUNhbGxhYmxlX0NoZWNrKHRlbXApKSB7CisgCSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw
ZUVycm9yLCAicGFyYW1ldGVyIG11c3QgYmUgY2FsbGFibGUgb3IgTm9uZSIpOworIAkgICAgcmV0
dXJuIE5VTEw7CisgCX0KKyAJUHlfWElOQ1JFRih0ZW1wKTsKKyAJcmVzdWx0ID0gZXhjZXB0aW9u
SGFuZGxlcjsKKyAJZXhjZXB0aW9uSGFuZGxlciA9IHRlbXA7CisgICAgIH0KKyAgICAgcmV0dXJu
IHJlc3VsdDsKKyB9CisgCiAgLyogZ2VuZXJpYyBjYWxsYmFjayBtYXJzaGFsICovCiAgc3RhdGlj
IHZvaWQgUHlHdGtfQ2FsbGJhY2tNYXJzaGFsKEd0a09iamVjdCAqbywgZ3BvaW50ZXIgZGF0YSwg
Z3VpbnQgbmFyZ3MsCiAgCQkJCSAgR3RrQXJnICphcmdzKSB7CioqKioqKioqKioqKioqKgoqKiog
MzIyNCwzMjM1ICoqKioKICAgICAgcmV0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChmdW5jLCBwYXJh
bXMpOwogICAgICBQeV9ERUNSRUYocGFyYW1zKTsKICAgICAgaWYgKHJldCA9PSBOVUxMKSB7CiEg
CWlmIChQeUd0a19GYXRhbEV4Y2VwdGlvbnMpCiEgCSAgICBndGtfbWFpbl9xdWl0KCk7CiEgCWVs
c2UgewohIAkgICAgUHlFcnJfUHJpbnQoKTsKISAJICAgIFB5RXJyX0NsZWFyKCk7CiEgCX0KICAJ
UHlHVEtfVU5CTE9DS19USFJFQURTCiAgCXJldHVybjsKICAgICAgfQotLS0gMzI3MCwzMjc2IC0t
LS0KICAgICAgcmV0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChmdW5jLCBwYXJhbXMpOwogICAgICBQ
eV9ERUNSRUYocGFyYW1zKTsKICAgICAgaWYgKHJldCA9PSBOVUxMKSB7CiEgCUhhbmRsZUV4Y2Vw
dGlvbigpOwogIAlQeUdUS19VTkJMT0NLX1RIUkVBRFMKICAJcmV0dXJuOwogICAgICB9CioqKioq
KioqKioqKioqKgoqKiogMzI2NiwzMjc3ICoqKioKICAgICAgUHlfREVDUkVGKHBhcmFtcyk7CiAg
CiAgICAgIGlmIChyZXQgPT0gTlVMTCkgewohICAgICAgICAgaWYgKFB5R3RrX0ZhdGFsRXhjZXB0
aW9ucykKISAJICAgIGd0a19tYWluX3F1aXQoKTsKISAJZWxzZSB7CiEgCSAgICBQeUVycl9Qcmlu
dCgpOwohIAkgICAgUHlFcnJfQ2xlYXIoKTsKISAJfQogIAlQeUdUS19VTkJMT0NLX1RIUkVBRFMK
ICAJcmV0dXJuOwogICAgICB9Ci0tLSAzMzA3LDMzMTMgLS0tLQogICAgICBQeV9ERUNSRUYocGFy
YW1zKTsKICAKICAgICAgaWYgKHJldCA9PSBOVUxMKSB7CiEgCUhhbmRsZUV4Y2VwdGlvbigpOwog
IAlQeUdUS19VTkJMT0NLX1RIUkVBRFMKICAJcmV0dXJuOwogICAgICB9CioqKioqKioqKioqKioq
KgoqKiogMzMwMSwzMzEyICoqKioKICAgICAgZWxzZQogIAlyZXQgPSBQeU9iamVjdF9DYWxsT2Jq
ZWN0KGZ1bmMsIE5VTEwpOwogICAgICBpZiAocmV0ID09IE5VTEwpIHsKISAJaWYgKFB5R3RrX0Zh
dGFsRXhjZXB0aW9ucykKISAJICAgIGd0a19tYWluX3F1aXQoKTsKISAJZWxzZSB7CiEgCSAgICBQ
eUVycl9QcmludCgpOwohIAkgICAgUHlFcnJfQ2xlYXIoKTsKISAJfQogIAkqR1RLX1JFVExPQ19C
T09MKGFyZ3NbMF0pID0gRkFMU0U7CiAgCVB5R1RLX1VOQkxPQ0tfVEhSRUFEUwogIAkgICAgcmV0
dXJuOwotLS0gMzMzNywzMzQzIC0tLS0KICAgICAgZWxzZQogIAlyZXQgPSBQeU9iamVjdF9DYWxs
T2JqZWN0KGZ1bmMsIE5VTEwpOwogICAgICBpZiAocmV0ID09IE5VTEwpIHsKISAJSGFuZGxlRXhj
ZXB0aW9uKCk7CiAgCSpHVEtfUkVUTE9DX0JPT0woYXJnc1swXSkgPSBGQUxTRTsKICAJUHlHVEtf
VU5CTE9DS19USFJFQURTCiAgCSAgICByZXR1cm47CioqKioqKioqKioqKioqKgoqKiogMzMzMCwz
MzQxICoqKioKICAgIHJldCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZnVuYywgdHVwbGUpOwogICAg
UHlfREVDUkVGKHR1cGxlKTsKICAgIGlmIChyZXQgPT0gTlVMTCkgewohICAgICBpZiAoUHlHdGtf
RmF0YWxFeGNlcHRpb25zKQohICAgICAgIGd0a19tYWluX3F1aXQoKTsKISAgICAgZWxzZSB7CiEg
ICAgICAgUHlFcnJfUHJpbnQoKTsKISAgICAgICBQeUVycl9DbGVhcigpOwohICAgICB9CiAgICB9
IGVsc2UKICAgICAgUHlfREVDUkVGKHJldCk7CiAgICBQeUdUS19VTkJMT0NLX1RIUkVBRFMKLS0t
IDMzNjEsMzM2NyAtLS0tCiAgICByZXQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGZ1bmMsIHR1cGxl
KTsKICAgIFB5X0RFQ1JFRih0dXBsZSk7CiAgICBpZiAocmV0ID09IE5VTEwpIHsKISAgICAgSGFu
ZGxlRXhjZXB0aW9uKCk7CiAgICB9IGVsc2UKICAgICAgUHlfREVDUkVGKHJldCk7CiAgICBQeUdU
S19VTkJMT0NLX1RIUkVBRFMKKioqKioqKioqKioqKioqCioqKiA0NzUzLDQ3NjQgKioqKgogICAg
cmV0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNhbGxiYWNrLCAiaU8iLCBhY3Rpb24sCiAgCQkJ
ICAgICAgUHlHdGtfTmV3KChHdGtPYmplY3QgKil3aWRnZXQpKTsKICAgIGlmIChyZXQgPT0gTlVM
TCkgewohICAgICBpZiAoUHlHdGtfRmF0YWxFeGNlcHRpb25zKQohICAgICAgIGd0a19tYWluX3F1
aXQoKTsKISAgICAgZWxzZSB7CiEgICAgICAgUHlFcnJfUHJpbnQoKTsKISAgICAgICBQeUVycl9D
bGVhcigpOwohICAgICB9CiAgICB9IGVsc2UKICAgICAgUHlfREVDUkVGKHJldCk7CiAgICBQeUdU
S19VTkJMT0NLX1RIUkVBRFMKLS0tIDQ3NzksNDc4NSAtLS0tCiAgICByZXQgPSBQeU9iamVjdF9D
YWxsRnVuY3Rpb24oY2FsbGJhY2ssICJpTyIsIGFjdGlvbiwKICAJCQkgICAgICBQeUd0a19OZXco
KEd0a09iamVjdCAqKXdpZGdldCkpOwogICAgaWYgKHJldCA9PSBOVUxMKSB7CiEgICAgIEhhbmRs
ZUV4Y2VwdGlvbigpOwogICAgfSBlbHNlCiAgICAgIFB5X0RFQ1JFRihyZXQpOwogICAgUHlHVEtf
VU5CTE9DS19USFJFQURTCioqKioqKioqKioqKioqKgoqKiogNDgzMCw0ODQxICoqKioKICAgICAg
cmV0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmMsICJPaWkiLCBQeUd0a19OZXcoR1RLX09C
SkVDVChtZW51KSksCiAgCQkJCSp4LCAqeSk7CiAgICAgIGlmIChyZXQgPT0gTlVMTCB8fCAhUHlB
cmdfUGFyc2VUdXBsZShyZXQsICJpaSIsIHgsIHkpKSB7CiEgICAgICAgICBpZiAoUHlHdGtfRmF0
YWxFeGNlcHRpb25zKQohIAkgICAgZ3RrX21haW5fcXVpdCgpOwohICAgICAgICAgZWxzZSB7CiEg
CSAgICBQeUVycl9QcmludCgpOwohIAkgICAgUHlFcnJfQ2xlYXIoKTsKISAJfQogICAgICAgICAg
aWYgKHJldCkgewogIAkgIFB5X0RFQ1JFRihyZXQpOwogIAl9Ci0tLSA0ODUxLDQ4NTcgLS0tLQog
ICAgICByZXQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuYywgIk9paSIsIFB5R3RrX05ldyhH
VEtfT0JKRUNUKG1lbnUpKSwKICAJCQkJKngsICp5KTsKICAgICAgaWYgKHJldCA9PSBOVUxMIHx8
ICFQeUFyZ19QYXJzZVR1cGxlKHJldCwgImlpIiwgeCwgeSkpIHsKISAJSGFuZGxlRXhjZXB0aW9u
KCk7CiAgICAgICAgICBpZiAocmV0KSB7CiAgCSAgUHlfREVDUkVGKHJldCk7CiAgCX0KKioqKioq
KioqKioqKioqCioqKiA2NTQyLDY1NDcgKioqKgotLS0gNjU1OCw2NTY0IC0tLS0KICAjaWZkZWYg
SEFWRV9OVU1QWQogICAgICB7ICJnZGtfZHJhd19hcnJheSIsIF93cmFwX2dka19kcmF3X2FycmF5
LCAxIH0sCiAgI2VuZGlmCisgICAgIHsgInB5Z3RrX3NldF9leGNlcHRpb25faGFuZGxlciIsIFB5
R3RrX1NldEV4Y2VwdGlvbkhhbmRsZXIsIE1FVEhfVkFSQVJHUyB9LAogICAgICB7IE5VTEwsIE5V
TEwgfQogIH07CiAgCioqKioqKioqKioqKioqKgoqKiogNjU5MCw2NTk1ICoqKioKLS0tIDY2MDcs
NjYxNiAtLS0tCiAgI2lmZGVmIEhBVkVfTlVNUFkKICAgICAgIGltcG9ydF9hcnJheSgpOwogICNl
bmRpZgorIAorICAgICAgLyogRGVmYXVsdCBleGNlcHRpb25IYW5kbGVyICovCisgICAgICBQeV9Y
SU5DUkVGKFB5X05vbmUpOworICAgICAgZXhjZXB0aW9uSGFuZGxlciA9IFB5X05vbmU7CiAgCiAg
ICAgICAvKiBpbml0aWFsaXNlIHRoZSBib3hlZF9mdW5jcyBoYXNoX3RhYmxlICovCiAgICAgICBi
b3hlZF9mdW5jcyA9IGdfaGFzaF90YWJsZV9uZXcoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1
YWwpOwo=
---MOQ964109275fae91be2739e43bd609277fa96173fc2--