Better exception handling
This commit is contained in:
parent
9e24731d9a
commit
1bede88b62
@ -1,5 +1,6 @@
|
|||||||
import sys
|
import sys
|
||||||
import logging
|
import logging
|
||||||
|
import faulthandler
|
||||||
from signal import signal, SIGINT
|
from signal import signal, SIGINT
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
@ -24,6 +25,11 @@ class QuteBrowser(QApplication):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(sys.argv)
|
super().__init__(sys.argv)
|
||||||
|
# Exit on exceptions
|
||||||
|
sys.excepthook = self.tmp_exception_hook
|
||||||
|
|
||||||
|
# Handle segfaults
|
||||||
|
faulthandler.enable()
|
||||||
|
|
||||||
args = self.parseopts()
|
args = self.parseopts()
|
||||||
self.initlog()
|
self.initlog()
|
||||||
@ -55,18 +61,31 @@ class QuteBrowser(QApplication):
|
|||||||
self.mainwindow.status.txt.set_keystring)
|
self.mainwindow.status.txt.set_keystring)
|
||||||
|
|
||||||
self.mainwindow.show()
|
self.mainwindow.show()
|
||||||
|
|
||||||
self.python_hacks()
|
self.python_hacks()
|
||||||
|
|
||||||
|
def tmp_exception_hook(exctype, value, traceback):
|
||||||
|
"""Exception hook while initializing, simply exit"""
|
||||||
|
sys.__excepthook__(exctype, value, traceback)
|
||||||
|
self.exit(1)
|
||||||
|
|
||||||
|
def exception_hook(exctype, value, traceback):
|
||||||
|
"""Try very hard to write open tabs to a file and exit gracefully"""
|
||||||
|
sys.__excepthook__(exctype, value, traceback)
|
||||||
|
try:
|
||||||
|
for tabidx in range(self.mainwindow.tabs.count()):
|
||||||
|
try:
|
||||||
|
# FIXME write to some file
|
||||||
|
print(self.mainwindow.tabs.widget(tabidx).url().url())
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
self.exit(1)
|
||||||
|
|
||||||
def python_hacks(self):
|
def python_hacks(self):
|
||||||
"""Gets around some PyQt-oddities by evil hacks"""
|
"""Gets around some PyQt-oddities by evil hacks"""
|
||||||
## Make python exceptions work
|
## Make python exceptions work
|
||||||
sys._excepthook = sys.excepthook
|
sys.excepthook = self.exception_hook
|
||||||
def exception_hook(exctype, value, traceback):
|
|
||||||
sys._excepthook(exctype, value, traceback)
|
|
||||||
# FIXME save open tabs here
|
|
||||||
self.exit(1)
|
|
||||||
sys.excepthook = exception_hook
|
|
||||||
|
|
||||||
## Quit on SIGINT
|
## Quit on SIGINT
|
||||||
signal(SIGINT, lambda *args: self.exit(128 + SIGINT))
|
signal(SIGINT, lambda *args: self.exit(128 + SIGINT))
|
||||||
|
Loading…
Reference in New Issue
Block a user