【问题标题】:Python globally import in a for loop (preferrably Python 3.x)Python 在 for 循环中全局导入(最好是 Python 3.x)
【发布时间】:2019-04-22 20:35:27
【问题描述】:

我的代码是这样的:

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。我不知道我做错了什么,但希望你能做到。

编辑:这个问题不是重复的,因为我不“只是”想从字符串导入,而是从 for 循环中做到这一点。我基本上想从一个字符串中导入,在一个循环中,全局。

【问题讨论】:

  • 我明白为什么您可能希望有条件地处理 ffmpy 的导入,但 ossys...?!如果那些不存在……那又怎样?!
  • @deceze 我认为即使没有 try-except 块,这个问题也很有趣。
  • @deceze 我这样做是因为懒惰的编程,但我明白你的意思。我只是在那一行写了要导入的所有内容。
  • 好吧,别偷懒了。 ??? 很好 import 在无法导入的情况下引发异常,您需要一个非常好的理由来抑制这些异常。

标签: python python-3.x python-import python-module python-3.7


【解决方案1】:

我认为问题在于,虽然您已导入库 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")

应该可以。

编辑:

正如 cmets 中 @9769953 所建议的,更好的解决方案是使用:

globals()[module] = __import__(module)

然后您就可以像往常一样直接访问sys

【讨论】:

  • 或者如果你真的想要,使用globals()[module] = __import__(module),然后直接使用sys和其他,如sys.path.insert(0, r"C:\Users\david\Desktop\scripts")
猜你喜欢
  • 2023-03-03
  • 2019-05-09
  • 2012-09-21
  • 1970-01-01
  • 2014-11-10
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多