Python在for循环中全局导入(最好是Python3.x)
Python globally import in a for loop (preferrably Python 3.x)
我的代码是这样的:
for module in ["ffmpy","os","sys"]:
try:
__import__(module)
except:
print("Can't import ["+module+"]")
所以,我想在全球范围内导入它,但它似乎并没有这样做。在这段代码之后,我有 sys.path.insert(0, r"C:\Users\david\Desktop\scripts")
,python 控制台告诉我:NameError: name 'sys' is not defined
。我不知道我做错了什么,但希望你知道。
编辑:这个问题不是重复的,因为我 'just' 不想从字符串导入,而是从 for 循环中导入。我基本上想在全局循环中从字符串导入。
我认为问题在于尽管您导入了库 sys
但您还没有定义对象 sys
。
考虑以下两个示例:
# Doesn't work
__import__('sys')
sys.callstats()
这会引发相同的错误:"name 'sys' is not defined",而
# Works
sys = __import__('sys')
sys.callstats()
工作正常。
您需要将导入的对象存储在某个地方。字典似乎很明智:
import_dict = dict()
for module in ["ffmpy","os","sys"]:
try:
import_dict[module] = __import__(module)
except:
print("Can't import ["+module+"]")
import_dict['sys'].path.insert(0, r"C:\Users\david\Desktop\scripts")
应该可以。
编辑:
正如@9769953 在评论中所建议的,更好的解决方案是使用:
globals()[module] = __import__(module)
然后您可以像往常一样直接访问 sys
。
我的代码是这样的:
for module in ["ffmpy","os","sys"]:
try:
__import__(module)
except:
print("Can't import ["+module+"]")
所以,我想在全球范围内导入它,但它似乎并没有这样做。在这段代码之后,我有 sys.path.insert(0, r"C:\Users\david\Desktop\scripts")
,python 控制台告诉我:NameError: name 'sys' is not defined
。我不知道我做错了什么,但希望你知道。
编辑:这个问题不是重复的,因为我 'just' 不想从字符串导入,而是从 for 循环中导入。我基本上想在全局循环中从字符串导入。
我认为问题在于尽管您导入了库 sys
但您还没有定义对象 sys
。
考虑以下两个示例:
# Doesn't work
__import__('sys')
sys.callstats()
这会引发相同的错误:"name 'sys' is not defined",而
# Works
sys = __import__('sys')
sys.callstats()
工作正常。
您需要将导入的对象存储在某个地方。字典似乎很明智:
import_dict = dict()
for module in ["ffmpy","os","sys"]:
try:
import_dict[module] = __import__(module)
except:
print("Can't import ["+module+"]")
import_dict['sys'].path.insert(0, r"C:\Users\david\Desktop\scripts")
应该可以。
编辑:
正如@9769953 在评论中所建议的,更好的解决方案是使用:
globals()[module] = __import__(module)
然后您可以像往常一样直接访问 sys
。