Jerry~Mouse 发表于 2022-3-24 18:48:33

关于finally的疑惑

try:
    f = open('My_File.txt') # 当前文件夹中并不存在"My_File.txt"这个文件T_T
    print(f.read())
except OSError as reason:
    print('出错啦:' + str(reason))
finally:
    if 'f' in locals(): # 如果文件对象变量存在当前局部变量符号表的话,说明打开成功
      f.close()

红色部分的解释我还是没有看懂,local()这个语句是怎么用的?能举几个例子吗

python爱好者. 发表于 2022-3-24 18:52:25

我记着课上好像讲过......

qiuyouzhi 发表于 2022-3-24 18:54:40

举个例子你就懂了:
>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
>>> a = 5
>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 5}

__add__ 发表于 2022-3-24 18:57:05

locals 可以是任何 mapping 对象,用来指定代码执行时的局部变量以及收集代码执行后的局部变量

Jerry~Mouse 发表于 2022-3-24 19:16:16

qiuyouzhi 发表于 2022-3-24 18:54
举个例子你就懂了:

可以理解为,如果我创建了一个变量,这个变量以及变量所对映的值,会被扔进一个系统自带的字典里面去吗?

qiuyouzhi 发表于 2022-3-24 19:27:41

Jerry~Mouse 发表于 2022-3-24 19:16
可以理解为,如果我创建了一个变量,这个变量以及变量所对映的值,会被扔进一个系统自带的字典里面去吗?

差不多
页: [1]
查看完整版本: 关于finally的疑惑