【发布时间】:2019-11-30 05:11:34
【问题描述】:
首先,如果我没有使用正确的名称,我想道歉,我是 Python 新手。
在玩的过程中,我发现您可以在 with 语句的 as 部分分配给班级成员:
from contextlib import contextmanager
@contextmanager
def func(val):
yield val*2
class Foo:
def __init__(self):
self.val = "Placeholder"
def bar(self):
with func(333) as self.val:
print("Got", self.val)
if __name__ == "__main__":
f = Foo()
print("Before:", f.val)
f.bar()
print("After:", f.val)
输出:
之前:占位符
得到 666
之后:666
但是,分配给 except 中的成员会给我一个语法错误:
class Foo:
def __init__(self):
self.err = None
def bar(self):
try:
os.remove(path)
except FileNotFoundError as self.err:
print("Couldn't remove", path)
输出:
except FileNotFoundError as self.err: ^SyntaxError: 无效语法
由于搜索as 是徒劳的,我无法找到任何关于此的参考,我的问题是:
- 在
with语句的as部分中分配给成员的定义是否明确? - 如果是,为什么在异常处理中不允许?
编辑:我想关于import的类似问题可以问...
【问题讨论】:
-
我不知道答案是什么,但这是一个非常有趣的问题!
-
请注意,
as不是单独的运算符,而是相应语句的一部分。它在import ... as ...、except ... as ...和with ... as ...中的含义不同。 -
@MisterMiyagi,我明白了,虽然语义相似。 (另外,打蜡,打蜡)。
标签: python exception with-statement