在语句外使用python变量
作者:互联网
在Python脚本中,我遇到了一个在with语句内定义但在该语句外使用的变量,例如以下示例中的file:
with open(fname, 'r') as file:
pass
print(file.mode)
凭直觉,我会说该文件不应在with语句之外,并且只能偶然地起作用.我在Python文档中找不到关于是否应该运行的结论性声明.这种类型的语句是否可以安全使用(也适用于将来的python版本),还是应该避免使用?在Python文档中指向此信息的指针也将非常有帮助.
解决方法:
变量作用域仅适用于功能,模块和类级别.如果您在同一个功能/模块/类中,则所有定义的变量都将在该功能/模块/类中可用,无论它是否在with,for,if等块中定义.
例如,这:
for x in range(1):
y = 1
print(y)
与使用with语句的示例一样有效(尽管毫无意义).
但是,您必须小心,因为如果从未输入代码块,则可能实际上未定义代码块中定义的变量,在这种情况下:
try:
with open('filedoesnotexist', 'r') as file:
pass
except:
pass # just to emphasize point
print(file.mode)
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
file.mode
NameError: name 'file' is not defined
Good description of LEGB rule of thumb for variable scope
标签:with-statement,python 来源: https://codeday.me/bug/20191025/1932526.html