Skip to content

Commit 48a0b8d

Browse files
committed
Make lazy_import and MissingModule more resilient
1 parent 0da61ea commit 48a0b8d

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

src_py/__init__.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,13 @@ class MissingModule:
7373

7474
def __init__(self, name, urgent=0):
7575
self.name = name
76-
exc_type, exc_msg = sys.exc_info()[:2]
77-
self.info = str(exc_msg)
78-
self.reason = f"{exc_type.__name__}: {self.info}"
76+
exc_type, exc_msg, _ = sys.exc_info()
77+
if exc_type is not None:
78+
self.info = str(exc_msg)
79+
self.reason = f"{exc_type.__name__}: {self.info}"
80+
else:
81+
self.info = "<no info>"
82+
self.reason = f"<no exception>: {self.info}"
7983
self.urgent = urgent
8084
if urgent:
8185
self.warn()
@@ -315,11 +319,14 @@ def lazy_import(name):
315319
316320
Lazily imported modules are directly referenced in packager_imports function.
317321
"""
318-
spec = find_spec("pygame." + name)
322+
fullname = "pygame." + name
323+
spec = find_spec(fullname)
324+
if spec is None or spec.loader is None:
325+
return MissingModule(name, urgent=0)
319326
loader = LazyLoader(spec.loader)
320327
spec.loader = loader
321328
module = module_from_spec(spec)
322-
sys.modules[spec.name] = module
329+
sys.modules[fullname] = module
323330
loader.exec_module(module)
324331
return module
325332

0 commit comments

Comments
 (0)