我可以使用IPython的魔法,如 %paste和%cd在IPDB?有没有办法让ipdb在命令行中解释这些魔法?
我想调试一个在代码执行过程中发生的警告.
一个简单的断点不会这样做,因为在第一次警告发生之前,导致警告的行会在没有警告的情况下执行数百万次.
此外,发生这种情况的行是在库代码中(更准确地说,在中pandas/core/common.py),所以我的首选是根本不修改代码.
我只想在发出警告时立即停止程序的执行,并在此时检查堆栈,或者使用pdb或使用ipdb.
有没有办法配置调试器在发出警告时自动进入单步模式?
在下面的示例中:
import asyncio
import ipdb
class EchoServerProtocol:
def connection_made(self, transport):
self.transport = transport
def datagram_received(self, data, addr):
message = data.decode()
print('Received %r from %s' % (message, addr))
print('Send %r to %s' % (message, addr))
self.transport.sendto(data, addr)
loop = asyncio.get_event_loop()
ipdb.set_trace(context=21)
print("Starting UDP server")
# One protocol instance will be created to serve all client requests
listen = loop.create_datagram_endpoint( EchoServerProtocol, local_addr=('127.0.0.1', 9999))
transport, protocol = loop.run_until_complete(listen)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
transport.close()
loop.close()
Run Code Online (Sandbox Code Playgroud)
我正试图进入
loop.create_datagram_endpoint( EchoServerProtocol, local_addr=('127.0.0.1', 9999))
了解它在内部的表现.然而,当我尝试进入协程时,调试器只是跳过它,好像n已按下而不是 …
嗨,退出在 Jupyter Notebook 单元中运行的 ipdb 交互式控制台的正确方法是什么?我试过退出、退出、Ctrl-Z、Ctrl-C、Ctrl-D(在 chrome 中抛出书签请求)
更新:尝试 sys.exit(),它杀死了笔记本的内核。我们如何在不影响笔记本的情况下退出交互式 shell?
在过去的几天里,我遇到了PyCharm令人讨厌的事情。我正在尝试使用ipdb而不是pycharm调试器来调试程序,但只能在pycharm i/o console或中打开它python console。
无论如何,我可以在终端窗口中打开调试会话吗?甚至在新的终端窗口中?我不希望能够通过调试按钮打开会话,并且不要像python src/main.py在终端中那样写任何行
我想要这样做的主要原因是我可以ipython在终端机上获得自动完成功能,但是找不到在终端机窗口中打开调试会话的方法,还是可以这样做吗?和可以帮助的插件?python控制台给我的自动完成功能非常弱,无法真正帮助我
皮查姆2018.3
Centos 7 64位
考虑以下代码:
def inner(a):
if a == 75:
raise RuntimeError()
return a**2
def outer():
results = []
for a in range(100):
results.append(inner(a))
return results
outer()
Run Code Online (Sandbox Code Playgroud)
在 IPython 中,在引发异常后,%debug行魔术会在以下范围内打开 python 调试器inner():
In [4]: %debug
> <ipython-input-3-eff43b15b2ef>(3)inner()
2 if a == 75:
----> 3 raise RuntimeError()
4 return a**2
ipdb> a
a = 75
ipdb> results
*** NameError: name 'results' is not defined
Run Code Online (Sandbox Code Playgroud)
如何告诉 (i)pdb 进入范围outer()以保存到目前为止生成的结果?
我正在运行最新版本的ipdb 0.10.0,当我使用nosetests插件运行我的django测试套件时,一旦我打了一个import ipdb; ipdb.set_trace()电话,我就看不到提示了.
我已经尝试在nose args中添加一个'-s'参数,它显示了提示,但没有正确捕获它们在ipdb中的键盘输入.例如,我使用向上和向下箭头键丢失输入历史记录.
最后,我再次尝试使用ipdb 0.9.3,它运行正常.
我想知道是否有任何方法可以使用最新版本的ipdb来解决这个问题?有新的配置机制吗?
当我尝试在Jupyter Notebook中调试我的代码时,%debug我点击了"最旧的帧".
> $HOME/anaconda3/envs/py36/lib/python3.6/site-packages/matplotlib/axes/_base.py(244)_xy_from_xy()
242 if x.shape[0] != y.shape[0]:
243 raise ValueError("x and y must have same first dimension, but "
--> 244 "have shapes {} and {}".format(x.shape, y.shape))
245 if x.ndim > 2 or y.ndim > 2:
246 raise ValueError("x and y can be no greater than 2-D, but have "
ipdb> up
> $HOME/anaconda3/envs/py36/lib/python3.6/site-packages/matplotlib/axes/_base.py(385)_plot_args()
383 x, y = index_of(tup[-1])
384
--> 385 x, y = self._xy_from_xy(x, y)
386
387 if self.command == 'plot':
ipdb> up
> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Python 的调试模块 pdb 查看列表理解调用的结果。然而,pdb“环境”同时声明变量已定义和未定义,从而导致NameErrorpdb 同意定义的变量。以下是复制该问题的最小代码示例:
import pdb
def main():
bar = [0, 0, 1, 1]
foo(bar)
def foo(bar):
pdb.set_trace()
### pdb COMMANDS LISTED BELOW ARE CALLED HERE ###
print([False if bar[i] == 0 else True for i in range(len(bar))])
main()
Run Code Online (Sandbox Code Playgroud)
在上面指示的代码执行点运行以下 pdb 命令会产生以下结果。
(Pdb) p bar
[0, 0, 1, 1]
(Pdb) p [False if bar[i] == 0 else True for i in range(len(bar))]
*** NameError: name 'bar' is not defined
(Pdb) !print([False if bar[i] == 0 else …Run Code Online (Sandbox Code Playgroud) 我只是好奇是否存在 ipdb 调试器跳回引发异常的源的命令。
考虑下面的小程序。
import sys
import random
def somefun():
someval = random.random()
raise Exception()
def run():
try:
somefun()
except Exception:
sys.exit(10)
Run Code Online (Sandbox Code Playgroud)
run当从命令行(使用 ipython-console)运行该函数时,它会按应有的值以 10 退出。有没有办法启动事后调试器( )并通过跳回pdb.pm()获取值?someval