Six*_*ged 6 python import module list
我正在尝试从列表中导入模块。这将允许更轻松地编辑导入的模块,更清晰的错误消息以及更好的错误处理。这基本上是我想要做的:
imports = ['sys', 'itertools', 'datetime', 'os']
for x in imports:
try:
import x
print "Successfully imported ", x, '.'
except ImportError:
print "Error importing ", x, '.'
Run Code Online (Sandbox Code Playgroud)
这里的问题是它尝试导入x,而不是应该包含的值x。我意识到要从列表中导入,可以执行以下操作,但是我看不到任何处理错误的方法:
imports = ['sys', 'itertools', 'datetime', 'os']
modules = map(__import__, imports)
Run Code Online (Sandbox Code Playgroud)
有没有办法将错误处理与此方法集成在一起,还是应该尝试其他方法?
与其一次将它们映射到___import__所有模块,不如将每个模块一次附加到列表中modules的for循环中:
imports = ['sys', 'itertools', 'datetime', 'os']
modules = []
for x in imports:
try:
modules.append(__import__(x))
print "Successfully imported ", x, '.'
except ImportError:
print "Error importing ", x, '.'
Run Code Online (Sandbox Code Playgroud)
但是请注意,大多数Python程序员更喜欢使用importlib.import_module而不是__import__此任务。
还要注意,制作modules字典而不是列表可能会更好:
imports = ['sys', 'itertools', 'datetime', 'os']
modules = {}
for x in imports:
try:
modules[x] = __import__(x)
print "Successfully imported ", x, '.'
except ImportError:
print "Error importing ", x, '.'
Run Code Online (Sandbox Code Playgroud)
现在,而不是按索引:
modules[0].version
modules[3].path
Run Code Online (Sandbox Code Playgroud)
您可以按名称访问模块:
modules["sys"].version
modules["os"].path
Run Code Online (Sandbox Code Playgroud)