From e975af62f2a5f45307738dbd5220e8590c10f4a4 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 4 Jul 2011 02:08:50 +0200 Subject: [PATCH] Issue #12451: pydoc: importfile() now opens the Python script in binary mode, instead of text mode using the locale encoding, to avoid encoding issues. --- Lib/pydoc.py | 26 ++++++++++++-------------- Misc/NEWS | 3 +++ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 1619446c2d6..2533226025e 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -256,20 +256,18 @@ class ErrorDuringImport(Exception): def importfile(path): """Import a Python source file or compiled file given its path.""" magic = imp.get_magic() - file = open(path, 'r') - if file.read(len(magic)) == magic: - kind = imp.PY_COMPILED - else: - kind = imp.PY_SOURCE - file.close() - filename = os.path.basename(path) - name, ext = os.path.splitext(filename) - file = open(path, 'r') - try: - module = imp.load_module(name, file, path, (ext, 'r', kind)) - except: - raise ErrorDuringImport(path, sys.exc_info()) - file.close() + with open(path, 'rb') as file: + if file.read(len(magic)) == magic: + kind = imp.PY_COMPILED + else: + kind = imp.PY_SOURCE + file.seek(0) + filename = os.path.basename(path) + name, ext = os.path.splitext(filename) + try: + module = imp.load_module(name, file, path, (ext, 'r', kind)) + except: + raise ErrorDuringImport(path, sys.exc_info()) return module def safeimport(path, forceload=0, cache={}): diff --git a/Misc/NEWS b/Misc/NEWS index b2336504657..5d4ed6fe444 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -19,6 +19,9 @@ Core and Builtins Library ------- +- Issue #12451: pydoc: importfile() now opens the Python script in binary mode, + instead of text mode using the locale encoding, to avoid encoding issues. + - Issue #12451: runpy: run_path() now opens the Python script in binary mode, instead of text mode using the locale encoding, to support other encodings than UTF-8 (scripts using the coding cookie).