PyCharm编译不报错,但运行报错,可能是编译器认为while True可能不会进入,所以编译不报错。
use_width = 400
def write():
# global use_width
while True:
a = use_width
use_width =100
print(a)
print(use_width)
write()
编译器报错,错误与以上代码相同:UnboundLocalError: local variable 'use_width' referenced before assignment
use_width = 400
def write():
# global use_width
a = use_width
use_width =100
print(a)
print(use_width)
write()
编译运行均不报错:
use_width = 400
def write():
# global use_width
a = use_width
print(a)
print(use_width)
write()
---
C:\Users\hy\PycharmProjects\LoadVideo\venv\Scripts\python.exe C:/Users/hy/PycharmProjects/LoadVideo/test.py
400
400
Process finished with exit code 0
总结:
- 如果使用global关键字声明变量为全局变量,则直接使用全局变量进行读取和写入,无歧义
- 如果没有global关键字对全局变量的声明,则分2种情况:
a.如果函数体内没有对全局变量名赋值操作,则直接读取全局变量值使用,没有问题
b.如果函数体内有对全局变量名的赋值操作,则编译器会认为赋值处定义了局部变量,并且绑定此变量名到此局部变量,并影响整个函数体内的相同变量名。这样一来,如果在赋值操作前进行了全局变量名使用则会报错“UnboundLocalError: local variable 'use_width' referenced before assignment”。解决:此时必须将赋值操作放在函数内此变量使用前,或者在函数开头使用global引入全局变量来进行读取使用,具体操作根据实际业务逻辑需求确定。
网友评论