import keyword
import tokenize
import io
+import importlib.util
import _colorize
from contextlib import suppress
self._str += (". Site initialization is disabled, did you forget to "
+ "add the site-packages directory to sys.path "
+ "or to enable your virtual environment?")
+ else:
+ suggestion = _compute_suggestion_error(exc_value, exc_traceback, module_name)
+ if suggestion:
+ self._str += f". Did you mean: '{suggestion}'?"
elif exc_type and issubclass(exc_type, AttributeError) and \
getattr(exc_value, "name", None) is not None:
wrong_name = getattr(exc_value, "name", None)
d = [x for x in d if x[:1] != '_']
except Exception:
return None
+ elif isinstance(exc_value, ModuleNotFoundError):
+ try:
+ if parent_name := wrong_name.rpartition('.')[0]:
+ parent = importlib.util.find_spec(parent_name)
+ else:
+ parent = None
+ d = []
+ for finder in sys.meta_path:
+ if discover := getattr(finder, 'discover', None):
+ d += [spec.name for spec in discover(parent)]
+ except Exception:
+ return None
elif isinstance(exc_value, ImportError):
try:
mod = __import__(exc_value.name)