diff options
author | Brett Cannon <brett@python.org> | 2013-06-16 22:05:54 (GMT) |
---|---|---|
committer | Brett Cannon <brett@python.org> | 2013-06-16 22:05:54 (GMT) |
commit | f4375ef4d458bf24610ffef591f8197a3dbf0b35 (patch) | |
tree | 5ee2029fa137cf28d55afc5324caa9e57b209ac0 /Lib | |
parent | 01b0475b08ab694e2eb0610d03b629afe22bb2a1 (diff) | |
download | cpython-f4375ef4d458bf24610ffef591f8197a3dbf0b35.zip cpython-f4375ef4d458bf24610ffef591f8197a3dbf0b35.tar.gz cpython-f4375ef4d458bf24610ffef591f8197a3dbf0b35.tar.bz2 |
importlib.abc.SourceLoader.get_source() was re-raising SyntaxError and
UnicodeDecodeError as ImportError. That was over-reaching the point of
raising ImportError in get_source() (which is to signal the source
code was not found when it should have). Conflating the two exceptions
with ImportError could lead to masking errors with the source which
should be known outside of whether there was an error simply getting
the source to begin with.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/importlib/_bootstrap.py | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index f855e90..0668dbd 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -959,25 +959,17 @@ class SourceLoader(_LoaderBasics): def get_source(self, fullname): """Concrete implementation of InspectLoader.get_source.""" - import tokenize path = self.get_filename(fullname) try: source_bytes = self.get_data(path) except OSError as exc: raise ImportError("source not available through get_data()", name=fullname) from exc + import tokenize readsource = _io.BytesIO(source_bytes).readline - try: - encoding = tokenize.detect_encoding(readsource) - except SyntaxError as exc: - raise ImportError("Failed to detect encoding", - name=fullname) from exc + encoding = tokenize.detect_encoding(readsource) newline_decoder = _io.IncrementalNewlineDecoder(None, True) - try: - return newline_decoder.decode(source_bytes.decode(encoding[0])) - except UnicodeDecodeError as exc: - raise ImportError("Failed to decode source file", - name=fullname) from exc + return newline_decoder.decode(source_bytes.decode(encoding[0])) def source_to_code(self, data, path, *, _optimize=-1): """Return the code object compiled from source. |