summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2004-08-04 02:29:12 (GMT)
committerTim Peters <tim.peters@gmail.com>2004-08-04 02:29:12 (GMT)
commit3d3cfdb4994ed672436e3e16b66ac1b9349543db (patch)
treef19d6781141cc18952f27285aadb7b5355c54bb5
parent51fa3b740f3d76a26942904e151d366699b3eba9 (diff)
downloadcpython-3d3cfdb4994ed672436e3e16b66ac1b9349543db.zip
cpython-3d3cfdb4994ed672436e3e16b66ac1b9349543db.tar.gz
cpython-3d3cfdb4994ed672436e3e16b66ac1b9349543db.tar.bz2
ihooks FancyModuleLoader.load_module()
imputils Importer._process_result(): remove name from modules dict if exec fails. This is what all the builtin importers do now, new in 2.4.
-rw-r--r--Lib/ihooks.py8
-rw-r--r--Lib/imputil.py7
2 files changed, 13 insertions, 2 deletions
diff --git a/Lib/ihooks.py b/Lib/ihooks.py
index 936a950..f5b93ab 100644
--- a/Lib/ihooks.py
+++ b/Lib/ihooks.py
@@ -322,7 +322,13 @@ class FancyModuleLoader(ModuleLoader):
if path:
m.__path__ = path
m.__file__ = filename
- exec code in m.__dict__
+ try:
+ exec code in m.__dict__
+ except:
+ d = self.hooks.modules_dict()
+ if name in d:
+ del d[name]
+ raise
return m
diff --git a/Lib/imputil.py b/Lib/imputil.py
index 04111dc..e6ad7ec 100644
--- a/Lib/imputil.py
+++ b/Lib/imputil.py
@@ -297,7 +297,12 @@ class Importer:
# execute the code within the module's namespace
if not is_module:
- exec code in module.__dict__
+ try:
+ exec code in module.__dict__
+ except:
+ if fqname in sys.modules:
+ del sys.modules[fqname]
+ raise
# fetch from sys.modules instead of returning module directly.
# also make module's __name__ agree with fqname, in case