Skip to content

Commit dc5e87f

Browse files
committed
Log exceptions from auto completers
Also do not catch KeyboardInterrupt and SystemExit. Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
1 parent 3cdc732 commit dc5e87f

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

bpython/autocomplete.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import abc
3030
import glob
3131
import keyword
32+
import logging
3233
import os
3334
import re
3435
import rlcompleter
@@ -609,13 +610,18 @@ def get_completer(completers, cursor_offset, line, **kwargs):
609610
double underscore methods like __len__ in method signatures
610611
"""
611612

612-
try:
613-
for completer in completers:
613+
for completer in completers:
614+
try:
614615
matches = completer.matches(cursor_offset, line, **kwargs)
615-
if matches is not None:
616-
return sorted(matches), (completer if matches else None)
617-
except:
618-
pass
616+
except Exception as e:
617+
# Instead of crashing the UI, log exceptions from autocompleters.
618+
logger = logging.getLogger(__name__)
619+
logger.debug(
620+
'Completer {} failed with unhandled exception: {}'.format(
621+
completer, e))
622+
continue
623+
if matches is not None:
624+
return sorted(matches), (completer if matches else None)
619625

620626
return [], None
621627

0 commit comments

Comments
 (0)