From 27e82ce6c8a4b535babc4370fd958cd1dcd1cdb0 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 25 May 2015 15:27:29 +0200 Subject: [PATCH] Improve exception handling in qsavefile_open. Sometimes exceptions were shadowed with new exceptions because of the file flushing. --- qutebrowser/utils/qtutils.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/qutebrowser/utils/qtutils.py b/qutebrowser/utils/qtutils.py index f175dc202..af2a27a74 100644 --- a/qutebrowser/utils/qtutils.py +++ b/qutebrowser/utils/qtutils.py @@ -180,7 +180,7 @@ def deserialize_stream(stream, obj): def savefile_open(filename, binary=False, encoding='utf-8'): """Context manager to easily use a QSaveFile.""" f = QSaveFile(filename) - new_f = None + cancelled = False try: ok = f.open(QIODevice.WriteOnly) if not ok: @@ -192,13 +192,15 @@ def savefile_open(filename, binary=False, encoding='utf-8'): yield new_f except: f.cancelWriting() + cancelled = True raise - finally: + else: if new_f is not None: new_f.flush() + finally: commit_ok = f.commit() - if not commit_ok: - raise OSError(f.errorString()) + if not commit_ok and not cancelled: + raise OSError("Commit failed!") @contextlib.contextmanager