Skip to content

Commit 314ecba

Browse files
authored
Merge pull request #1635 from janezd/ofwile-catch-errors
[FIX] OWFile: Report errors for incorrect file formats instead of crashing
2 parents f539789 + a6c73ef commit 314ecba

File tree

1 file changed

+27
-20
lines changed

1 file changed

+27
-20
lines changed

Orange/widgets/data/owfile.py

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -257,29 +257,36 @@ def browse_file(self, in_demos=False):
257257

258258
# Open a file, create data from it and send it over the data channel
259259
def load_data(self):
260+
# We need to catch any exception type since anything can happen in
261+
# file readers
262+
# pylint: disable=broad-except
260263
self.editor_model.set_domain(None)
261-
self.reader = self._get_reader()
262-
if not self.reader:
263-
self.data = None
264-
self.send("Data", None)
265-
self.info.setText("No data.")
266-
return
267-
self._update_sheet_combo()
268264

269-
errors = []
270-
with catch_warnings(record=True) as warnings:
271-
try:
272-
data = self.reader.read()
273-
except Exception as ex:
274-
errors.append("An error occurred:")
275-
errors.append(str(ex))
276-
data = None
277-
self.editor_model.reset()
278-
self.warning(warnings[-1].message.args[0] if warnings else '')
279-
280-
if data is None:
265+
error = None
266+
try:
267+
self.reader = self._get_reader()
268+
if self.reader is None:
269+
self.send("Data", None)
270+
self.info.setText("No data.")
271+
self.sheet_box.hide()
272+
return
273+
except Exception as ex:
274+
error = ex
275+
276+
if not error:
277+
self._update_sheet_combo()
278+
with catch_warnings(record=True) as warnings:
279+
try:
280+
data = self.reader.read()
281+
except Exception as ex:
282+
error = ex
283+
self.warning(warnings[-1].message.args[0] if warnings else '')
284+
285+
if error:
281286
self.send("Data", None)
282-
self.info.setText("\n".join(errors))
287+
self.info.setText("An error occurred:\n{}".format(error))
288+
self.editor_model.reset()
289+
self.sheet_box.hide()
283290
return
284291

285292
self.info.setText(self._describe(data))

0 commit comments

Comments
 (0)