R 的 browser() 在 Python 中等效

问题描述 投票:0回答:3

标题说明了一切。当您工作

R
并使用
RStudio
时,通过在代码中的任意位置放置
browser()
调用并查看出现的问题,调试某些内容非常简单。有没有办法用 Python 来做到这一点?我慢慢地厌倦了打印语句调试。

python r debugging data-science
3个回答
17
投票

看起来您正在寻找ipdb

基本用法是设置:

import ipdb
ipdb.set_trace()

在您的代码中进行探索;这将带您直接到达代码的该部分,以便您可以探索此时的所有变量。

对于您的特定用例:“这是否是我的控制台中的一个设置,以便它在崩溃之前打开 pdb”(对另一个答案的评论),您可以使用上下文管理器:

launch_ipdb_on_exception

例如:

from ipdb import launch_ipdb_on_exception

def silly():
    my_list = [1,2,3]
    for i in xrange(4):
        print my_list[i]

if __name__ == "__main__":
    with launch_ipdb_on_exception():
        silly()

将带您参加

ipdb
会议:

      5         for i in xrange(4):
----> 6             print my_list[i]
      7

ipdb> i
3

11
投票

你可以使用python的调试器

import pdb
pdb.set_trace()

这将在调试模式下暂停脚本

示例:

my_file=open('running_config','r')
word_count={}
special_character_count={}
import pdb
pdb.set_trace() <== The code will pause here
for config_lines in my_file.readlines():
    l=config_lines.strip()
    lines=l.upper()

控制台:

> /home/samwilliams/workspace/parse_running_config/file_operations.py(6)<module>()
-> for config_lines in my_file.readlines():
(Pdb) print special_character_count
{}
(Pdb) 

0
投票

从 python 3.7 开始,现在还有一个内置函数:breakpoint。因此,只需在代码中调用

breakpoint()
,就像在 R 中调用
browser()
一样。

由于它是内置函数,因此您不必像其他答案一样首先执行 import 语句,之后您可能会忘记删除它。


有关断点()的一些其他详细信息。

在底层,

breakpoint
调用函数sys.breakpointhook,默认情况下,它会从Python调试器库
pdb
中的pdb.set_trace()调用调试器。

但是您可以通过 PYTHONBREAKPOINT 环境变量配置该函数以使用您喜欢的任何调试器,例如

ipython 调试器
ipyd.set_trace()

© www.soinside.com 2019 - 2024. All rights reserved.