系统环境:Ubuntu 18.04.1 LTS

Python使用的是虚拟环境:virutalenv

Python的版本:Python 3.6.9

简说Python之ipython

1.安装ipython

pip install ipython

2.ipython的使用

In [1]: run utils.py                                                                          

In [2]: cat utils.py
# coding=utf-8
import os
import hashlib
from functools import partial from config import UPLOAD_FOLDER HERE = os.path.abspath(os.path.dirname(__file__)) def get_file_md5(f, chunk_size=8192):
h = hashlib.md5()
while True:
chunk = f.read(chunk_size)
if not chunk:
break
h.update(chunk)
return h.hexdigest() def humanize_bytes(bytesize, precision=2):
abbrevs = (
(1 << 50, 'PB'),
(1 << 40, 'TB'),
(1 << 30, 'GB'),
(1 << 20, 'MB'),
(1 << 10, 'kB'),
(1, 'bytes')
)
if bytesize == 1:
return '1 byte'
for factor, suffix in abbrevs:
if bytesize >= factor:
break
return '%.*f %s' % (precision, bytesize / factor, suffix) get_file_path = partial(os.path.join, HERE, UPLOAD_FOLDER) In [3]: humanize_bytes(100)
Out[3]: '100.00 bytes' In [4]: humanize_bytes(430004)
Out[4]: '419.93 kB' In [5]: humanize_bytes(430004342342)
Out[5]: '400.47 GB'

这样可以不启动所有的py程序,直接测试某一个函数的功能。通过输入参数,得到输出。

函数的性质,把它看成一个黑盒子。测试它的输入输出。

humanize_bytes通过测试可以知道,它就是格式化数字,统计为多少字节,KB,MB,GB等。

3.ipython的debug调试。

python写了一个简单的递归程序

(zsdpy1) $ vi recursive.py
# coding=utf-8
def recu(n):
print ("level 1 value :",n);
if(n>2):
recu(n-1)
print ("--level 2 value :",n);
recu(5)

进入调试

In [4]: run -d recursive.py  

      1 # coding=utf-8
----> 2 def recu(n):
3 print ("level 1 value :",n);
4 if(n>2):
5 recu(n-1)
  • b设置断点命令,进入调试模式输入b xx(xx为行数)。
  • n命令单步执行,不会进入函数内部
  • s命令单步执行,会进入函数内部
  • a是打印出当前函数的参数值
  • j 是跳转到某一行执行有点类似b和c指令结合,具体使用j xx(xx为行数)
  • q,退出pdb调试模式

这里我们输入s命令,单步调试,看看这个递归程序是如何运行的。

ipdb> s
## 直接跳入到了recu(5)的过程
> /home/zsd/web_develop/recursive.py(8)<module>()
4 if(n>2):
5 recu(n-1)
6 print ("--level 2 value :",n);
7
----> 8 recu(5) ipdb> s
## 运行recu(n)的函数
> /home/zsd/web_develop/recursive.py(2)recu()
1 # coding=utf-8
----> 2 def recu(n):
3 print ("level 1 value :",n);
4 if(n>2):
5 recu(n-1)
## 输出函数值5
> /home/zsd/web_develop/recursive.py(3)recu()
1 # coding=utf-8
2 def recu(n):
----> 3 print ("level 1 value :",n);
4 if(n>2):
5 recu(n-1) ipdb> s
level 1 value : 5
> /home/zsd/web_develop/recursive.py(4)recu()
2 def recu(n):
3 print ("level 1 value :",n);
----> 4 if(n>2):
5 recu(n-1)
6 print ("--level 2 value :",n);
然后就会一直循环,到2的时候,在循环出来。有兴趣的可以s继续单步调试

其输出结果是:

level 1 value : 5
level 1 value : 4
level 1 value : 3
level 1 value : 2
--level 2 value : 2
--level 2 value : 3
--level 2 value : 4
--level 2 value : 5

简说Python之ipython的pdb调试的更多相关文章

  1. python学习笔记之pdb调试

    之前一直说要学python可还是一直停留在看的层面,昨天大神手把书教我pdb调试,说要摆脱IDE集成开发环境编程,感激不尽,立一个flag,python一定要入门! 1.进入方式 1)windows ...

  2. python学习笔记012——pdb调试

    1 描述 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能, 主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等 调 ...

  3. PDB调试Python程序

    pdb是python内置的调试工具, 它可以在终端中调试Python程序, 这允许pdb在很多无法安装IDE的服务器上使用. 虽然远程调试使用广泛, 但在必要的时候(比如难以在本地搭建运行环境)pdb ...

  4. 使用pdb调试python

    python pdb调试 python -m pdb myscript.py #注意这会重启myscript.py,这样启动的话,代码每一行都是一个节点 也可以在程序中这么设置断点: import p ...

  5. python 用pdb调试

    简单调试 Python 程序   在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py): $ vi d.py ...

  6. python pdb调试以及sublime3快捷键设置

    python pdb调试以及sublime3快捷键设置 pdb调试 如果对gdb比较熟悉的话,pdb就很容易上手.以一个demo快速了解常用的调试命令. def test(a): while True ...

  7. Python 代码使用pdb调试技巧

    Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug.python 提供了一系列 debug 的工具和包,可供我们选择.本文将主要阐述如何利用 pyt ...

  8. [Python学习笔记][第八章Python异常处理结构与程序调试]

    1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...

  9. pdb 调试

    以前写python一直用pycharm,调试啥的比较方便,最近要在远程服务器上调试一些程序,只有一个控制台就可以用pdb进行调试了.常用的只有几个命令. break 或 b 设置断点 continue ...

  10. 在 Python 中使用 GDB 来调试 转载

    2013/11/01 | Comments 大约一年前,我接触了 Java 中的 Btrace 能够不停机查看线上 JVM 运行情况的特性让我艳羡不已. 另外还有强悍的 jStack 和 jConso ...

随机推荐

  1. KingbaseES V8R6 集群环境备库不结束旧事务快照将影响主库的vacuum操作

    前言 昨天同事遇到了一个有关vacuum的典型问题. V8R6读写分离集群环境,一主多备. 版本:kingbaseesv008r006c004 问题现象: 主库日常巡检发现日志大量记录: waring ...

  2. UE4 c++ -- 简单的UMG

    说明 学习一下如何将Widget蓝图与C++连接起来,将处理逻辑写在C++中 基础 在蓝图中,我们显示Widget是通过一个Actor或者PlayerController,甚至关卡蓝图,利用Creat ...

  3. #根号分治#洛谷 3645 [APIO2015]雅加达的摩天楼

    题目传送门 分析 设 \(d[i][j]\) 表示 所处位置为 \(i\),跳跃能力为 \(j\) 的步数, 若 \(j\leq \sqrt{n}\),这样的状态最多有 \(n\sqrt{n}\) 个 ...

  4. #循环节,gcd#JZOJ 5362 密码

    题目 询问一个排列\(A\)是否能够通过\(A_i=A_{A_i}\)得到, 同时还要满足给定的两个数通过加减或者交换能够得到已知的两个数 分析 下面的就是要保证\(\gcd\)相同,但是还有上面的操 ...

  5. 开源图形驱动在OpenHarmony上的使用和落地

      本文转载自 OpenHarmony TSC 官方微信公众号<峰会回顾第10期 | 开源图形驱动在OpenHarmony上的使用和落地> 演讲嘉宾 | 黄   然 回顾整理 | 廖    ...

  6. Agent内存马分析

    什么是Java Agent 我们知道Java是一种强类型语言,在运行之前必须将其编译成.class字节码,然后再交给JVM处理运行.Java Agent就是一种能在不影响正常编译的前提下,修改Java ...

  7. vue-cli4,vue3打包后页面无内容

    这个问题百度了一下,各种各样的的回答都有,试了好多种方法,终于解决这个问题 解决方法: 1.在项目根目录下,新建  vue.config.js, 在文件中输入: module.exports = { ...

  8. mmdeploy源码安装 (转换faster rcnn r50/yolox为tensorrt,并用mmdeploy sdk推理)

    mmdeploy源码安装 (转换faster rcnn r50/yolox为tensorrt,并进行推理) 这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善.如果有那个地方没看懂,评论区问就 ...

  9. 深度解读《深度探索C++对象模型》之返回值优化

    接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表. 没有启用返回值优 ...

  10. 中国大陆地区维护的Linux操作系统

    Linux开源生态丰富,中国大陆地区基于CentOS停服,依托阿里云.腾讯云.华为云三大私营企业,相继发布了自己的开源Linux定制版,很高兴的是他们只是改个名字并没有选择闭门造车,只是官网还是很不耻 ...