diff options
Diffstat (limited to 'Lib/site.py')
-rw-r--r-- | Lib/site.py | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/Lib/site.py b/Lib/site.py index 9d1084a4a2..a2c0becbc1 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -55,6 +55,7 @@ ImportError exception, it is silently ignored. import sys import os import builtins +import traceback # Prefixes for site-packages; add additional prefixes like /usr/local here PREFIXES = [sys.prefix, sys.exec_prefix] @@ -141,17 +142,26 @@ def addpackage(sitedir, name, known_paths): except IOError: return with f: - for line in f: + for n, line in enumerate(f): if line.startswith("#"): continue - if line.startswith(("import ", "import\t")): - exec(line) - continue - line = line.rstrip() - dir, dircase = makepath(sitedir, line) - if not dircase in known_paths and os.path.exists(dir): - sys.path.append(dir) - known_paths.add(dircase) + try: + if line.startswith(("import ", "import\t")): + exec(line) + continue + line = line.rstrip() + dir, dircase = makepath(sitedir, line) + if not dircase in known_paths and os.path.exists(dir): + sys.path.append(dir) + known_paths.add(dircase) + except Exception as err: + print("Error processing line {:d} of {}:\n".format(n+1, fullname), + file=sys.stderr) + for record in traceback.format_exception(*sys.exc_info()): + for line in record.splitlines(): + print(' '+line, file=sys.stderr) + print("\nRemainder of file ignored", file=sys.stderr) + break if reset: known_paths = None return known_paths |