代码之家  ›  专栏  ›  技术社区  ›  GhostCat

“组织输入”打断了脚本,这是怎么回事?

  •  0
  • GhostCat  · 技术社区  · 5 年前

    一个同事发给我一个脚本,开头是这样的:

    from ourlibA import *
    from ourlibB import *
    import random
    import time
    from datetime import datetime
    
    print datetime.now()
    

    当我这样调用脚本时,它运行得很好。

    但我使用的是pycharm,在做了一些编辑之后,我还使用了它的“组织导入”功能,将导入变成:

    import random
    import time
    from datetime import datetime
    
    from ourlibA import *
    
    from ourlibB import *
    
    print datetime.now()
    

    打印datetime.now()

    AttributeError:“module”对象没有“now”属性

    • 这里到底发生了什么?的导入 datetime
    • 显然,问题一定是因为第二个示例最后导入了我们自己的库,而不是第一个。但我怎样才能确切地找出我们图书馆的哪一部分导致了这种情况呢?

    我知道这不是一个完整的mcve,但这些私人图书馆是巨大的,私人的。我更想问的是如何在python中处理这样一个“导入订单”问题。

    (我使用的是python 2.7.17)

    0 回复  |  直到 5 年前
        1
  •  0
  •   GhostCat    5 年前

    我采用了一种“暴力”的方法,简单地手动检查私有库的import语句(递归地),以确定是否存在

    import datetime
    

    from datetime import datetime 声明。

    两个“快速解决方案”(更多:肮脏的黑客)通过更改客户端脚本工作:

    • 正在删除
    • 使用“完整路径” print datetime.datetime.now() 相反

    “更好”的解决办法:退后一步,把两者都去掉 from X import *

    推荐文章