python导入模块全局本地命名空间

时间:2017-07-15 12:56:11

标签: python module namespaces

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

我有一个包含

的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 blah Traceback(最近一次调用最后一次):文件   主题为“。\ myScript.py”,第288行       rootDir = sys.argv [1] IndexError:列表索引超出范围

     

在处理上述异常期间,发生了另一个异常:

     

回溯(最近一次调用最后一次):文件“。\ myScript.py”,第299行,   在       main()文件“。\ myScript.py”,第290行,在main中       usage(0)文件“。\ myScript.py”,第15行,正在使用中       sys.exit()NameError:名称'sys'未定义

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

如何在我的脚本中为所有功能提供导入?

提前致谢

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

只需在文件顶部而不是在函数中导入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()