Index: Lib/site.py =================================================================== --- Lib/site.py (revision 87478) +++ Lib/site.py (working copy) @@ -55,6 +55,7 @@ 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 @@ 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") + break if reset: known_paths = None return known_paths @@ -174,7 +184,13 @@ return names = [name for name in names if name.endswith(".pth")] for name in sorted(names): - addpackage(sitedir, name, known_paths) + try: + addpackage(sitedir, name, known_paths) + except Exception as err: + print("Error processing %r:\n" % os.path.join(sitedir, name), + file=sys.stderr) + traceback.print_exc(file=sys.stderr) + continue if reset: known_paths = None return known_paths