在函数中导入模块后,模块未定义

时间:2015-05-25 17:12:09

标签: python

我试图使用一个名为start的函数在python中设置我的环境。该函数导入os。 运行该功能后,执行以下操作 os.listdir(simdir +"主&#34) 我收到一个错误,说明os未定义 代码

>>> def setup ():
    import os.path
    import shutil
    simdir="e:\\"
    maindir="c:\\backup\\bitcois\\test exit\\"

>>> setup()
>>> os.listdir(simdir+"main")
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    os.listdir(simdir+"main")
NameError: name 'os' is not defined

5 个答案:

答案 0 :(得分:1)

import语句的作用域。导入模块时,它们是为本地名称空间定义的。

From the documentation

  

导入语句分两步执行:(1)找到一个模块,并在必要时进行初始化; (2)在本地名称空间(发生import语句的作用域)中定义一个或多个名称。 [...]

因此,在您的情况下,os包仅在函数setup中定义。

答案 1 :(得分:0)

您收到此错误是因为您没有导入整个os库而只导入os.path模块。这样,os库中的其他资源无法供您使用。

为了能够使用os.listdir方法,您需要将其与os.path一起导入,如下所示:

>>> def setup ():
    import os.path, os.listdir
    import shutil
    simdir="e:\\"
    maindir="c:\\backup\\bitcois\\test exit\\"

或导入完整的库:

>>> def setup ():
    import os
    import shutil
    simdir="e:\\"
    maindir="c:\\backup\\bitcois\\test exit\\"

您可以在这里阅读更多内容: https://docs.python.org/2/tutorial/modules.html

答案 2 :(得分:0)

尝试:

import os.path
import shutil
import glob

def setup ():
    global simdir
    simdir="e:\\"
    maindir="c:\\backup\\bitcois\\test exit\\"

setup()
os.listdir(simdir+"main")

答案 3 :(得分:0)

您需要返回路径并在全局范围内分配返回的值。另外,也导入os

import os

def setup():
    # retain existing code
    return simdir, maindir

simdir, maindir = setup()

答案 4 :(得分:0)

当您在函数中导入操作系统或执行任何类型的命令时,该命令的效果仅在该函数本身运行时持续。你需要做的是

import os
...Do your function and other code

这样,您的导入将持续整个程序:)。