在函数范围内交互使用python控制台,无需调试模式

在函数范围内交互使用python控制台,无需调试模式,python,ipython,pdb,Python,Ipython,Pdb,以下是我想要的: def f(): x = 3 return 在控制台中运行该命令并请求x不会给出任何结果,因为x在函数范围内。另一种方法是将其中的所有代码复制到一个新脚本中,对其进行解压并运行它。然后我可以求x的值。如果我有一个复杂的函数f(),或者更糟糕的是,类中有方法,那么正确地复制/取消绑定/交互输出和代码修改/复制回/tabify可能是一个令人沮丧的操作 在函数范围内获得交互式控制台的唯一方法是使用pdb,但我希望其中有一个干净的控制台,而不是调试程序 > x

以下是我想要的:

def f():
    x = 3
    return
在控制台中运行该命令并请求x不会给出任何结果,因为x在函数范围内。另一种方法是将其中的所有代码复制到一个新脚本中,对其进行解压并运行它。然后我可以求x的值。如果我有一个复杂的函数f(),或者更糟糕的是,类中有方法,那么正确地复制/取消绑定/交互输出和代码修改/复制回/tabify可能是一个令人沮丧的操作

在函数范围内获得交互式控制台的唯一方法是使用pdb,但我希望其中有一个干净的控制台,而不是调试程序

> x
Traceback (most recent call last):

  File "<ipython-input-25-401b30e3b8b5>", line 1, in <module>
    x

NameError: name 'x' is not defined
>x
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
x
名称错误:未定义名称“x”

我使用IPython作为更好的Python控制台:

import IPython

def some_complex_fn():
    x = 42
    IPython.embed()

some_complex_fn()
然后,交互式控制台了解
x

我找不到“经典”Python控制台是否有类似的API


如果您正在编写web应用程序,那么带有web界面的调试器可能会更好—例如,还包括一个交互式控制台。

我使用IPython作为更好的Python控制台:

import IPython

def some_complex_fn():
    x = 42
    IPython.embed()

some_complex_fn()
然后,交互式控制台了解
x

我找不到“经典”Python控制台是否有类似的API


如果您正在编写web应用程序,那么带有web界面的调试器可能会更好—例如,还包括一个交互式控制台。

我使用IPython作为更好的Python控制台:

import IPython

def some_complex_fn():
    x = 42
    IPython.embed()

some_complex_fn()
然后,交互式控制台了解
x

我找不到“经典”Python控制台是否有类似的API


如果您正在编写web应用程序,那么带有web界面的调试器可能会更好—例如,还包括一个交互式控制台。

我使用IPython作为更好的Python控制台:

import IPython

def some_complex_fn():
    x = 42
    IPython.embed()

some_complex_fn()
然后,交互式控制台了解
x

我找不到“经典”Python控制台是否有类似的API


如果您正在编写一个web应用程序,那么带有web界面的调试器可能会更好—例如,还包括一个交互式控制台。

谢谢,这是可行的,但如果我已经在IPython中,则在打开新的IPython控制台时,它似乎会崩溃。不过,在Python控制台中,它可以工作。@grokkaine:您不需要“打开一个新的IPython控制台”。如果它真的崩溃了(而不是引发一个可能解释问题的异常),您可能需要针对IPython提交一个bug。@grokkaine:但无论如何,
embed
的意义在于,您可以从bash/cmd/任何shell正常运行程序,并且它会在
embed
点启动IPython控制台,在
一些复杂的环境中运行,而不是在默认的全局环境中启动。这基本上就是你想要的,比如
pdb
,但是有一个“干净的控制台,而不是调试器”。是的,问题是我用一个编辑器编辑我的代码,在我的例子中是Spyder,它集成了IPython控制台(和Python)。因此,如果有一种方法可以在IPython控制台上工作,那就更好了。我将在我的问题中更具体一些,或者我可以自己解决它。谢谢,这是可行的,但是如果我已经在IPython中,当打开一个新的IPython控制台时,它似乎崩溃了。不过,在Python控制台中,它可以工作。@grokkaine:您不需要“打开一个新的IPython控制台”。如果它真的崩溃了(而不是引发一个可能解释问题的异常),您可能需要针对IPython提交一个bug。@grokkaine:但无论如何,
embed
的意义在于,您可以从bash/cmd/任何shell正常运行程序,并且它会在
embed
点启动IPython控制台,在
一些复杂的环境中运行,而不是在默认的全局环境中启动。这基本上就是你想要的,比如
pdb
,但是有一个“干净的控制台,而不是调试器”。是的,问题是我用一个编辑器编辑我的代码,在我的例子中是Spyder,它集成了IPython控制台(和Python)。因此,如果有一种方法可以在IPython控制台上工作,那就更好了。我将在我的问题中更具体一些,或者我可以自己解决它。谢谢,这是可行的,但是如果我已经在IPython中,当打开一个新的IPython控制台时,它似乎崩溃了。不过,在Python控制台中,它可以工作。@grokkaine:您不需要“打开一个新的IPython控制台”。如果它真的崩溃了(而不是引发一个可能解释问题的异常),您可能需要针对IPython提交一个bug。@grokkaine:但无论如何,
embed
的意义在于,您可以从bash/cmd/任何shell正常运行程序,并且它会在
embed
点启动IPython控制台,在
一些复杂的环境中运行,而不是在默认的全局环境中启动。这基本上就是你想要的,比如
pdb
,但是有一个“干净的控制台,而不是调试器”。是的,问题是我用一个编辑器编辑我的代码,在我的例子中是Spyder,它集成了IPython控制台(和Python)。因此,如果有一种方法可以在IPython控制台上工作,那就更好了。我将在我的问题中更具体一些,或者我可以自己解决它。谢谢,这是可行的,但是如果我已经在IPython中,当打开一个新的IPython控制台时,它似乎崩溃了。不过,在Python控制台中,它可以工作。@grokkaine:您不需要“打开一个新的IPython控制台”。如果它真的崩溃了(而不是引发一个可能解释问题的异常),您可能需要针对IPython提交一个bug。@grokkaine:但无论如何,
embed
的意义在于,您可以从bash/cmd/任何shell正常运行程序,并且它会在
embed
点启动IPython控制台,在某个复杂的环境中运行,而不是在de中启动