Python ';x';在ipdb中使用列表理解时未定义
我曾经尝试过这段代码,但出于某种原因,它认为ast没有定义,即使在导入之后也是如此。如何避免这种情况?好吧,我找到了一种方法,但这很烦人 首先,发生这种情况是因为列表理解有它自己的范围,所以它们不在(i)pdb中工作。有关更多信息,请参阅: 解决方案是使用map+lambda模拟列表理解,我可以通过Python ';x';在ipdb中使用列表理解时未定义,python,pdb,Python,Pdb,我曾经尝试过这段代码,但出于某种原因,它认为ast没有定义,即使在导入之后也是如此。如何避免这种情况?好吧,我找到了一种方法,但这很烦人 首先,发生这种情况是因为列表理解有它自己的范围,所以它们不在(i)pdb中工作。有关更多信息,请参阅: 解决方案是使用map+lambda模拟列表理解,我可以通过 ipdb> import ast ipdb> [t.unparse() if isinstance(t, ast.AST) else t for t in tree] *** NameE
ipdb> import ast
ipdb> [t.unparse() if isinstance(t, ast.AST) else t for t in tree]
*** NameError: name 'ast' is not defined
需要code>,因为列表
是pdb中的一个关键字它会变得更好
看到这个了吗
您可以在会话开始时键入interact
,使您的ipdb
会话具有交互性,而不是使用globals
现在你可以继续你原来的样子了,一切都会好起来的
更好的解决方案
将模块拉入全局范围
!list(map((lambda t: t if type(t) is str else t.unparse()), tree))
试着从ast导入一个相同的问题,事实上这是由于列表生成器有它自己的范围,我发现了一个丑陋的解决方案这回答了你的问题吗?另一种解决方案是创建一个引用ast
的全局变量,然后使用该全局变量。看看我的嗯,谢谢,我会试试的:)
ipdb> import ast
ipdb> global ast # <-- This
ipdb> [t.unparse() if isinstance(t, ast.AST) else t for t in tree]
ipdb> import ast
ipdb> AST=ast.AST
ipdb> [t.unparse() if isinstance(t, AST) else t for t in tree]