Python函数中的导入语句失败
我有一个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上运行时,我把导入语句放到了文件的顶部,并把setup_nt_stdin
函数的内容替换成了pass,这样就能正常工作了。
我原以为可以从一个函数中导入东西。这个函数在一个类里面,我是不是漏掉了什么其他的语法?
1 个回答
1
import
语句只是在本地范围内绑定了导入模块的名称。
为了绕过这个限制,你可以这样做:
def setup_nt_stdin(self):
global msvcrt
import msvcrt
不过,考虑到你可以多次使用 import
而不会重复执行,而且在实际使用 msvcrt
这个名称之前,你需要检查操作系统,可能在每个需要它的 Windows 特定函数内部直接 import msvcrt
会更合理。