M
Manuel Pégourié-Gonnard
Hi,
I was looking at the example found here [1] which begins with:
[1] http://docs.python.org/py3k/library/imp.html#examples
def __import__(name, globals=None, locals=None, fromlist=None):
# Fast path: see if the module has already been imported.
try:
return sys.modules[name]
except KeyError:
pass
I was wondering if the formulation
if name in sys.modules:
return sys.modules[name]
would be equivalent. IOW, is using try/except here only a matter of
style or a necessity?
I'm suspecting that maybe, in multithreaded environments, the second
option may be subject to a race condition, if another thread removes
name frome sys.modules between the if and the return, but as I'm not
very familiar (yet) with Python threads, I'm not sure it is a real
concern here.
And maybe there are other reasons I'm completely missing for prefering
EAFP over LBYL here?
Thanks in advance for your comments.
I was looking at the example found here [1] which begins with:
[1] http://docs.python.org/py3k/library/imp.html#examples
def __import__(name, globals=None, locals=None, fromlist=None):
# Fast path: see if the module has already been imported.
try:
return sys.modules[name]
except KeyError:
pass
I was wondering if the formulation
if name in sys.modules:
return sys.modules[name]
would be equivalent. IOW, is using try/except here only a matter of
style or a necessity?
I'm suspecting that maybe, in multithreaded environments, the second
option may be subject to a race condition, if another thread removes
name frome sys.modules between the if and the return, but as I'm not
very familiar (yet) with Python threads, I'm not sure it is a real
concern here.
And maybe there are other reasons I'm completely missing for prefering
EAFP over LBYL here?
Thanks in advance for your comments.