为什么 `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
我有两个问题:
- 为什么第 4 行的
kivy
被识别为变量而不是模块?
- 第 8 行如何影响第 4 行是否引发异常?
我认为您已达到 global/local 描述的标准行为,例如in this answer,但由于您是通过导入分配给变量这一事实让您感到有些困惑。
请注意,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
我有两个问题:
- 为什么第 4 行的
kivy
被识别为变量而不是模块? - 第 8 行如何影响第 4 行是否引发异常?
我认为您已达到 global/local 描述的标准行为,例如in this answer,但由于您是通过导入分配给变量这一事实让您感到有些困惑。
请注意,kivy
变量并不特殊,因为您是通过导入分配给它的,它仍然是一个遵循正常重新分配和引用规则的变量名。