首页 > 解决方案 > 为什么 `kivy` 被视为一个变量而不是一个模块?

问题描述

以下代码运行没有错误。

import kivy
def main():
    try:
        kivy.require('1.9.2')
    except Exception as e:
        import traceback
        traceback.print_exc()
        #import kivy.base
if __name__ in ('__main__'):
    main()

但是,如果我取消注释第 8 行,它会打印:

 Traceback (most recent call last):
   File "main.py", line 4, in main
     kivy.require('1.9.2')
 UnboundLocalError: local variable 'kivy' referenced before assignment

我有两个问题:

  1. 为什么kivy第 4 行被识别为变量而不是模块?
  2. 第 8 行如何影响第 4 行是否引发异常?

标签: pythonimportscopekivy

解决方案


我认为您已经达到了例如this answer中描述的标准全局/本地行为,但由于您通过导入分配给变量这一事实而略有混淆。

请注意,kivy变量并不是因为您通过导入分配给它而特别,它仍然是遵循正常重新分配和引用规则的变量名称。


推荐阅读