编程语言
首页 > 编程语言> > 在语句外使用python变量

在语句外使用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