【问题标题】:python import module global local namespacepython导入模块全局本地命名空间
【发布时间】:2017-12-20 11:14:12
【问题描述】:

在调用函数时,我无法理解导入是如何工作的。我相信它与范围有关,但我不知道它是如何工作的。我在网站或一些教程上检查了类似的问题,但看起来我只是不明白它是如何工作的

我有一个 python 脚本 MyScipt.py 包含

def usage(errorID):
    # import sys
    if errorID == 0:
        print("blah blah blah")
    print("blah blah blah")
    print("blah blah blah"+\
    sys.exit()

def main():
    import sys
    # print(len(sys.argv),sys.argv)
    try:
        rootDir = sys.argv[1]
    except IndexError:
        usage(0)

# MAIN PROGRAM
#
if __name__ =="__main__":
    main()

执行失败

PS D:\xxx\python> python .\myScript.py blah blah blah blah blah blah blah blah blah Traceback(最近一次通话最后):文件 “.\myScript.py”,第 288 行,在 main rootDir = sys.argv[1] IndexError: 列表索引超出范围

在处理上述异常的过程中,又发生了一个异常:

Traceback(最近一次调用最后一次):文件“.\myScript.py”,第 299 行, 在 main() 文件“.\myScript.py”,第 290 行,在 main 用法(0)文件“.\myScript.py”,第 15 行,正在使用中 sys.exit() NameError: name 'sys' is not defined

如果我取消注释第二行 (# import sys),它将起作用

如何让脚本中的所有函数都可以使用导入?

提前致谢

【问题讨论】:

  • 为什么不在顶层所有函数定义之前导入import sys
  • 确实这是我想编写代码的初始位置,但后来我搞砸了“我应该在哪里调用import os.path”。我会将此问题标记为答案,并可能会打开一个新问题。谢谢

标签: python module namespaces


【解决方案1】:

感谢大家的反馈。 import sys语句必须放在脚本开头才能解决这个错误

【讨论】:

    【解决方案2】:

    只需在文件顶部而不是函数中导入 sys。

    import sys
    def usage(errorID):
    
        if errorID == 0:
            print("blah blah blah")
        print("blah blah blah")
        print("blah blah blah"+\
        sys.exit()
    
    def main():
        import sys
        # print(len(sys.argv),sys.argv)
        try:
            rootDir = sys.argv[1]
        except IndexError:
            usage(0)
    
    # MAIN PROGRAM
    #
    if __name__ =="__main__":
        main()
    

    您收到第二个错误,因为您没有将任何参数传递给脚本,然后 sys 未定义,因此您无法 sys.exit()

    【讨论】:

    • 你是对的。这是我想把它放在第一位的地方,但是在尝试使用 os.path 方法时事情变得一团糟。我想我应该提出另一个问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2019-03-14
    • 2014-12-02
    • 1970-01-01
    相关资源
    最近更新 更多