python import语句在函数中失败

时间:2014-03-04 17:49:40

标签: python windows python-3.x

我有一个python模块,需要能够在Windows和Linux上运行。运行时它会响应某些键盘“热键”。它是一个python 3.3脚本。

在我的类构造函数中,我执行以下操作:

self.setup_stdin()

函数setup_stdin是这样的:

def setup_stdin(self):
    self.osname = os.name
    if self.osname == 'posix':
        self.setup_posix_stdin()
    elif self.osname == 'nt':
        self.setup_nt_stdin()

当我在Linux上运行时,我对setup_posix_stdin没有任何问题,它只会使stdin无阻塞,因此我可以处理击键。

setup_nt_stdin如下:

def setup_nt_stdin(self):
    import msvcrt

但是,当我在Windows 7上运行时,我的程序会以

炸弹
NameError: global name 'msvcrt' is not defined

为了解决这个问题,当我在Windows上运行时,我将import语句移动到文件的顶部,并用pass替换setup_nt_stdin函数体,它运行正常。

我以为我可以从一个函数导入。这个函数在一个类里面,还有其他一些我缺少的语法吗?

1 个答案:

答案 0 :(得分:1)

import语句仅在本地范围内绑定导入模块的名称。

要解决这个问题,你可以这样做:

def setup_nt_stdin(self):
    global msvcrt
    import msvcrt

虽然考虑到你可以import多次执行某些事情而不再执行任何事情,并且在实际使用名称msvcrt之前你需要警卫来检查操作系统,这可能更有意义在需要它的每个特定于窗口的函数中只有import msvcrt