使用spyder3调试python程序的实现步骤

目录
  • Spyder官方文档地址
  • 开始调试
  • 打断点的两种姿势
    • 普通的breakpoint
    • 带条件的breakpoint
  • 总结一下刚刚所讲的
  • 剩下的一些细节
    • Step Into
    • Return

说是简明教程,其实是我自己尝试用spyder调试python程序的过程的一个记录,因为spyder的调试功能是基于pdb,而我又没有pdb的基础,所以刚开始上手时感觉很不习惯,而且那时我又很懒,没去找官方文档,仅仅在百度和csdn上找了找,没找到比较好的资料,于是放弃了,过了一段时间之后,突然又心血来潮,去找了官方文档,外加自己的一些尝试,总算入门了spyder的调试功能,特地记录下来与大家共享,我使用的spyder版本是3.1.4(使用pip list命令查看spyder版本)

Spyder官方文档地址

http://pythonhosted.org/spyder/

开始调试

先写一个简单的小程序用于调试:

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 28 23:59:40 2017

@author: 燃烧杯
"""

a = 'a'
b = 'b'
c = 'c'
e = 'e'
f = 'f'
g = 'g'
h = 'h'
print(a)

我们暂时先不打断点,用debug的方式运行该代码试试

点击spyder工具栏上的Debug file按钮,或者使用快捷键Ctrl+F5开始调试。

在ipython界面会输出如图所示的内容:

出现了ipdb提示符,说明我们已经进入了调试模式,上面输出的内容可以看出是代码的第一行,接着在提示符中输入c(continue的缩写,表示程序继续向下执行到下一个断点),会输出如下内容:

程序执行结束,可见即使我们没有打断点,仍然会在第一句执行之前中断(经测试,中断的时候第一句还没有执行),这个和我用过的其他编译器不太一样(比如eclipse和IntelliJ,在不打断点的情况下会正常执行到底),一开始还让我困惑了一下,后来就适应了.
如果你仔细看刚才的工具栏截图的话,会发现在debug按钮组的第五个按钮和刚刚的c命令是一样的功能,但是不知道为什么,在我这个版本的spyder里有这个按钮一些bug(具体来说就是在程序执行结束之后不会自动退出pdb,而且之后再想使用q命令退出也退出不了,换而言之,就是卡死在了pdb里面),如果你使用的是更高版本的spyder的话,这个bug可能已经修复了,可以尝试一下.

打断点的两种姿势

普通的breakpoint

用spyder打断点的方法非常简单,只要在想打断点的那一行行首双击鼠标即可,如图所示,我们尝试建立一个断点:

在每次开始debug之前,先在spyder的ipython界面中输入%reset 把工作空间的所有变量清除,以免影响到我们接下来的测试.
按下Ctrl+F5开始debug,进行如图所示的操作:

然后我们就到达了断点处,从箭头(–>)以及d:\ide\pyproject\pdbtest\test1.py(12)<module>() 中的数字12可以看出程序刚刚执行到了第12行(也就是我们打断点的这一行),第12行到底有没有执行呢?只要测试一下f变量是否存在就可以了,尝试在ipdb中进行如下输入:

!(python语句)的意思就是在当前状态下执行该python语句,我刚刚的用法的意思显然是查看变量内容,从!f 的错误信息可以看出f尚未定义,即第12行代码(f='f')还没有执行,查看e变量发现e变量已经被定义了,这说明第11行已经执行结束了。通过以上实验可以看出,spyder会在断点语句的执行之前中断

带条件的breakpoint

双击刚刚在第12行代码开头创建的“小红点”即可取消断点。
按住Ctrl+Shift,然后像刚才一样双击第12行行首,会弹出一个小框:

在这个小框内可以输入断点的条件,可以是任意返回True或False的python语句,比如我输入

(a==4)and(b==5)

然后点击OK按钮,发现小红点上多了一个问号,这个表示条件断点(conditional breakpoint),开始debug试一下.

发现程序只在第一句中断一下,断点根本就没有起作用,因为在断点的时候,a变量为'a',b变量为'b',不符合条件当然不会中断.

现在重新开始debug,然后连续按三遍Ctrl+F10,然后发现程序执行到了第十行:

其实Ctrl+F10是单行执行的意思,每按一次执行一行,相当于点击了工具栏上如下图所示的按钮:

这个时候我可以使用刚刚讲过的!(python语句)来给a,b临时指定一个值,在ipdb的提示符中输入!a=4;b=5 ,然后使用c命令继续执行,发现在条件断点处中断了,因为此时满足了我们刚刚给条件断点指定的条件:

如果忘记了条件断点的条件是什么的话,可以按住Ctrl+Shift键双击“带问号的小红点”,然后就能看见条件是什么了,而且还可以修改条件,如果要取消断点的话,直接双击就可以了。

总结一下刚刚所讲的

  1. Ctrl+F5 以Debug模式运行文件
  2. 在debug之前记得用%reset 指令清空一下ipython工作空间中的变量,以免影响debug中变量值的查看
  3. 无论你是否打断点,都会在第一行语句执行之前中断一次
  4. !(python语句)可以在pdb提示符下执行python语句,可以用来查看变量值或者给变量临时指定值
  5. c命令或者Ctrl+F12可以让程序执行到下一个断点
  6. q命令退出调试
  7. Ctrl+F10 单行执行
  8. 双击行首设置断点,按住Ctrl+Shift 双击行首可以设置条件断点

剩下的一些细节

上面的例子已经包括了大多数常用的功能,如果曾经用过别的编译器的调试功能的话(如eclipse和IntelliJ等),看到这里就可以了,对于有调试经验的人来说,我下面要讲的两个功能只要看到按钮的名称就大概知道它是做什么的了.
如下:

Step Into

上面一张图的按钮的功能我们称之为Step Into(下面一张图的按钮的功能我们称之为return),用于进入一个函数体内部,为了更清楚的说明它的功能,我们给出一个例子,在spyder中创建如下程序:

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 29 14:22:46 2017

@author: 燃烧杯
"""

def myTest():
    c = 'a'
    d = 'b'
    e = 'c'
    return c

a = 'a'
b = 'b'
c = myTest()
f = 'f'
print(a)

我们开始debug,不断地按Ctrl+F10 单行执行这个程序,当运行到c = myTest() 这句时注意一下:

不管myTest()中有多少代码都直接当做一行跳了过去,用q命令退出调试。
重新debug该文件,单行执行到c = myTest() 这行时按Ctrl+F11 使用Step Into功能,发现我们进入了函数内部的代码段:

这就Step Into的主要功能.

Return

Return的功能与Step Into的功能刚好相反,当使用Step Into进入函数之后,按Ctrl+Shift+F11 后会直接跳到该函数的执行的最后一行,此时在按一遍Ctrl+Shift+F11 或者Ctrl+F10 (单行执行)就可以跳出函数了,想要尝试的话可以自行在我上面给出的例子中尝试.

到此这篇关于使用spyder3调试python程序的实现步骤的文章就介绍到这了,更多相关spyder3调试python内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • spyder 在控制台(console)执行python文件,debug python程序方式

    执行: 在IPython console里先cd到test.py所在的文件夹,再run test.py.注意使用的是命令run 而不是命令python. debug: 栗子: debugfile('/home/1/tensor2tensor/tensor2tensor/bin/t2t-datagen', args='--problem=image_mnist --data_dir=~/t2t_data --tmp_dir=~/t2t_data/tmp',wdir='/home/1/tensor2

  • 快速了解Python开发环境Spyder

    Spyder简介 Spyder (前身是 Pydee) 是一个强大的交互式 Python 语言开发环境,提供高级的代码编辑.交互测试.调试等特性,支持包括 Windows.Linux 和 OS X 系统. ● 菜单栏(Menu bar):显示可用于操纵Spyder各项功能的不同选项. ● 工具栏(Tools bar):通过单击图标可快速执行Spyder中最常用的操作,将鼠标悬停在某个图标上可以获取相应功能说明. ● 路径窗口(Python path):显示文件目前所处路径,通过其下拉菜单和后面的

  • 解决python spyder 突然打不开的问题

    问题: python spyder先出现dos窗口,然后后面就什么都没有了. 解决方法: C:\用户\Administrator\.spyder3 删除这个.spyder3文件夹就好了,然后启动spyder,就好了 补充:Spyder不能启动问题及解决 问题描述 Spyder不能启动,点击图标,鼠标会转圈圈,但是启动不了. 在Anaconda Prompt控制台输入start spyder弹出黑框,然后消失. 原因分析 求助搜索引擎后得到可能的原因: 没有安装pyqt5,或者其版本不对 没有安装

  • python Spyder界面无法打开的解决方法

    Spyder本来还用得好好的,能正常使用,后来再关闭打开时,出现下面的蜘蛛网界面后,就无法显示操作界面了: 后来在网上搜索了多种方法,甚至还将Adaconda2重装了都没有用. 后来找到一个方法,说删除C:\Users\Administrator路径下的.spyder文件夹(你的有可能是.spyder2或.spyder3),再重启spyder即可. 不过我尝试了一下,没什么用,后来结合了之前的搜索方法,将.matplotlib和.spyder一起删掉再重启,就能正常显示了. 以上这篇python

  • Python Spyder 调出缩进对齐线的操作

    初学python,对python的对齐很重视,为了防止出错,使用spyder工具提供的功能 下面是方法: 1.首先打开Tools菜单栏下的Preferences 出现如下界面 轻松1,2,3步之后就可以发现有: 当然,红色的矩形框是我自己通过画图工具画上的,当然我找到的spyder中提供的方法就是这个, 另外给大家提供两个快捷键: ctrl +[ ctrl+] 鼠标选中那一行,上面命令是向左缩进一个tab,下面是向右缩进一个tab,很方便 有些时候,我更比较喜欢 Tab键 Shift 键+ Ta

  • 使用spyder3调试python程序的实现步骤

    目录 Spyder官方文档地址 开始调试 打断点的两种姿势 普通的breakpoint 带条件的breakpoint 总结一下刚刚所讲的 剩下的一些细节 Step Into Return 说是简明教程,其实是我自己尝试用spyder调试python程序的过程的一个记录,因为spyder的调试功能是基于pdb,而我又没有pdb的基础,所以刚开始上手时感觉很不习惯,而且那时我又很懒,没去找官方文档,仅仅在百度和csdn上找了找,没找到比较好的资料,于是放弃了,过了一段时间之后,突然又心血来潮,去找了

  • 调试Python程序代码的几种方法总结

    程序能一次写完并正常运行的概率很小,基本不超过1%.总会有各种各样的bug需要修正.有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug. 第一种方法简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看: # err.py def foo(s): n = int(s) print '>>> n = %d' % n return 10 / n def main(): f

  • 使用PDB模式调试Python程序介绍

    以前在windows下一直用的idel带的功能调试python程序,在linux下没调试过.(很多时候只是print)就从网上查找一下~ 方法: 复制代码 代码如下: python -m pdb a.py a.py是python文件. (Pdb)模式下的常用命令: q 退出debug h 即help,打印所有可以命令 h w 打印命令 w 的含意 n 执行当前行直到到达下一行或直到它返回 s 执行当前行,一有可能就停止(比如当前行有一个函数调用).它和n(next)的区别是当前行中有函数调用时s

  • 利用Pycharm断点调试Python程序的方法

    1.代码 准备没有语法错误的Python程序: #!/usr/bin/python import numpy as np class Network: def __init__(self,sizes): self.num_layers=len(sizes) self.sizes=sizes self.biases=[np.random.randn(y,1) for y in sizes[1:]] self.weights=[np.random.randn(x,y) \ for x,y in zi

  • VSCode基础使用与VSCode调试python程序入门的图文教程

    用VSCode编程是需要依赖扩展的.写python需要安装python的扩展,写C++需要安装C++的扩展.刚打开编辑器的时候,它一般会推荐一些扩展,你如果什么都不知道,可以先安装官方推荐的这些扩展: 修改VSCode的一些选项的默认值 VSCode有很多选项可以被修改,其各个选项都有默认值,这些默认值存储在"\settings.json"中(不过我没找到这个文件),用户如果想修改某些选项的值(比如:修改字体的大小),VSCode会自动帮我们生成一个"settings.jso

  • 使用PDB简单调试Python程序简明指南

    在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py): 复制代码 代码如下: $ vi d.py #!/usr/bin/python def main():         i, sum = 1, 0         for i in xrange(100):                 sum = sum + i         print sum if __name__ == '__main__'

  • 使用pip发布Python程序的方法步骤

    写过 Python 程序的小伙伴们都知道,需要 import 个非 Python 自带的软件包时,都要用到 pip 这个程序.平时我们都是用 pip,如果我们写好了一个程序,想让大家都能用的到,那么是不是也可以通过 pip 发布出去呢? 答案当然是可以了,这篇文章我们就来看看如何用 pip 发布一个 python 程序. 1. 环境准备 要用 pip 发布 python 程序,首先当然是要安装 Python 和 pip 这两个软件了,以 Ubuntu 16.04 为例: $ sudo apt u

  • 调试php程序的简单步骤

    一般如何调试php程序? 一般使用Xdebug,Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. 第一步.下载xdebug 有两个版本带有Non-thread-safe和不带有Non-thread-safe,缩写(ts)主要是看你的php版本是否线程安全版本. 然后把下载的dll拷贝到php里面的ext文件夹里(扩展dll都在这里),改名为php_xdebug.dll 小编用的Windows7 + apache + mysql

  • 使用pdb模块调试Python程序实例

    在Python中,语法错误可以被Python解释器发现,但逻辑上错误或变量使用错误却不容易发现,如果结果没有符合预期,则需要调试,一个很好的调试工具:Python自带的pdb模块.pdb是Python自带的调试模块.使用pdb模块可以为脚本设置断点.单步执行.查看变量值等. pdb可以用命令行参数的方式启动,也可以使用import 将其导入后再使用. 复制代码 代码如下: >>> dir(pdb)  ['Pdb', 'Repr', 'Restart', 'TESTCMD',.....,'

  • 利用setuptools打包python程序的方法步骤

    一.准备工程文件 1.创建工程leeoo 2.在工程根目录下创建setup.py文件 3.在工程根目录下创建同名package 二.编辑setup.py 1.编辑setup.py文件 from setuptools import setup, find_packages setup( name='leeoo', # 包的名称 version='1.0', # 版本号 packages=find_packages(), # 动态获取packages description="leeoo packa

随机推荐