Python 访问上下文管理器中的变量

Python 访问上下文管理器中的变量,python,contextmanager,Python,Contextmanager,我想使用eval函数访问上下文管理器定义之外的变量 我有: context.py 类上下文: 定义初始化(self,arg1): self.arg1=arg1 定义输入(自我): 回归自我 定义退出(自身、类型、值、回溯): 打印(eval(self.arg1)) main.py 从上下文导入上下文 a='外部上下文' 将上下文(arg1='a')作为c: 通过 脚本main.py应该访问变量a,但我有以下错误 回溯(最近一次呼叫最后一次): 文件“c:/code/context test/

我想使用
eval
函数访问上下文管理器定义之外的变量

我有:

context.py

类上下文:
定义初始化(self,arg1):
self.arg1=arg1
定义输入(自我):
回归自我
定义退出(自身、类型、值、回溯):
打印(eval(self.arg1))
main.py

从上下文导入上下文
a='外部上下文'
将上下文(arg1='a')作为c:
通过
脚本
main.py
应该访问变量
a
,但我有以下错误

回溯(最近一次呼叫最后一次):
文件“c:/code/context test/main.py”,第8行,在
通过
文件“c:\code\context test\context.py”,第9行,在退出__
打印(eval(self.arg1))
文件“”,第1行,在
NameError:未定义名称“a”
甚至可以通过将变量的名称传递给其他模块中的函数或类来访问变量
a

提前谢谢你

精确地编辑最后,我想做类似的事情,并在退出时在上下文管理器中对
a
执行操作

从上下文导入上下文
将上下文(arg1='a')作为c:
a=1
a*=2

上下文管理器与否并不重要,该变量根本不在范围内,也不应该在范围内。为什么不将
a
而不是
'a'
传递到
上下文中呢?!是的,我应该精确到,最后我甚至想在上下文管理器中创建一个变量,并在退出时对其执行操作,但在之前保持引用作为经验法则,您应该只传递值,而不是变量的名称。即使有某种方法可以从另一个作用域向后弯曲并从其名称解析变量,这也可能是非常意外的行为,因此…最好首先不要这样做。在一般情况下,您打算做的是不可能的:您只能动态创建全局(而不是局部)变量。这很可能会导致复杂的逻辑、糟糕的可维护性以及缺乏IDE和Linter的支持。