为什么 `kivy` 被视为一个变量而不是一个模块?

Why is `kivy` seen as a variable rather than a module?

以下代码运行无误。

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. 为什么第 4 行的 kivy 被识别为变量而不是模块?
  2. 第 8 行如何影响第 4 行是否引发异常?

我认为您已达到 global/local 描述的标准行为,例如in this answer,但由于您是通过导入分配给变量这一事实让您感到有些困惑。

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