iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python之错误调试
  • 819
分享到

python之错误调试

错误python 2023-01-31 00:01:34 819人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

  无论谁写的程序,必定会存在bug,解决bug需要我们去调试程序。于是乎,在python中,就会好几种调试手段,如print、assert、logging、pdb、pdb.set_trace()   一、使用print()函数直接打印

  无论谁写的程序,必定会存在bug,解决bug需要我们去调试程序。于是乎,在python中,就会好几种调试手段,如print、assert、logging、pdb、pdb.set_trace()

  一、使用print()函数直接打印

>>> def foo(s):
...     n = int(s)
...     print(n)
...     return 10 / n
...
>>> def main():
...     foo('0')
...
>>> main()
0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in main
  File "<stdin>", line 4, in foo
ZeroDivisionError: division by zero

  我们可以在认为可能出错的地方打印变量,但这有很大的弊端,因为打印的代码没有实际功能,都是垃圾信息。而且print最后还得删除,所以第二种方法是用assert替代print

  二、使用断言assert

>>> def foo(s):
...     n = int(s)
...     assert n != 0,'n的值是0!'
...     return 10 / n
...
>>> def main():
...     foo('0')
...
>>> main()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in main
  File "<stdin>", line 3, in foo
AssertionError: n的值是0!

  assert的意思,当后面的表达式为False时,就会抛出AssertionError,如果为True,什么都不做,直接到下一行。assert有一大特性:在启动Python解释器的时候可以使用-O参数来关闭assert(大写的o)

PS E:\python3.6.3\workspace> python -O err_assert.py
Traceback (most recent call last):
  File "err_assert.py", line 9, in <module>
    main()
  File "err_assert.py", line 7, in main
    foo('0')
  File "err_assert.py", line 4, in foo
    return 10 / n
ZeroDivisionError: division by zer

  三、使用logging

import logging
logging.basicConfig(level=logging.INFO)
s = '0'
n = int(s)
logging.info('n=%d' % n)
print(10/n)

#执行结果
PS E:\Python3.6.3\workspace> python err_logginginfo.py
INFO:root:n=0
Traceback (most recent call last):
  File "err_logginginfo.py", line 6, in <module>
    print(10/n)
ZeroDivisionError: division by zero

  使用logging不会抛出错误,直接输出到文件中。logging可以允许你指定记录信息的级别,级别由低到高分别是debug、info、warning、error、CRITICAL等级别,当定义高级别的时候,低级别的信息不会输出,这是把日志信息输出到控制台console,我们还可以通过设置把日志输出到文件中

  四、使用python的调试器pdb

  可以让程序以单步方式执行,方便我们随时查看运行状态

  新建程序err_pdb.py

s = '0'
n = int(s)
print(10 / n)

  然后以pdb模式启动

PS E:\Python3.6.3\workspace> python -m pdb err_pdb.py
> e:\python3.6.3\workspace\err_pdb.py(1)<module>()
-> s = '0'
(Pdb) l
  1  -> s = '0'
  2     n = int(s)
  3     print(10 / n)
[EOF]
(Pdb) n
> e:\python3.6.3\workspace\err_pdb.py(2)<module>()
-> n = int(s)
(Pdb) p s
'0'
(Pdb) p n
*** NameError: name 'n' is not defined
(Pdb) n
> e:\python3.6.3\workspace\err_pdb.py(3)<module>()
-> print(10 / n)
(Pdb) p n
0
(Pdb) p s
'0'
(Pdb) n
ZeroDivisionError: division by zero
> e:\python3.6.3\workspace\err_pdb.py(3)<module>()
-> print(10 / n)
(Pdb) n
--Return--
> e:\python3.6.3\workspace\err_pdb.py(3)<module>()->None
-> print(10 / n)
(Pdb) n
ZeroDivisionError: division by zero
> <string>(1)<module>()->None
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb) n
Traceback (most recent call last):
  File "E:\Python3.6.3\lib\pdb.py", line 1667, in main
    pdb._runscript(mainpyfile)
  File "E:\Python3.6.3\lib\pdb.py", line 1548, in _runscript
    self.run(statement)
  File "E:\Python3.6.3\lib\bdb.py", line 431, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File "e:\python3.6.3\workspace\err_pdb.py", line 3, in <module>
    print(10 / n)
ZeroDivisionError: division by zero
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
> e:\python3.6.3\workspace\err_pdb.py(3)<module>()->None
-> print(10 / n)
(Pdb) q
Post mortem debugger finished. The err_pdb.py will be restarted
> e:\python3.6.3\workspace\err_pdb.py(1)<module>()
-> s = '0'
(Pdb) n
> e:\python3.6.3\workspace\err_pdb.py(2)<module>()
-> n = int(s)
(Pdb) q
PS E:\Python3.6.3\workspace>
小写字母l,可以列出所有要执行的代码;

n 命令表示单步执行代码;

p 后面加上变量名,可以随时查看变量的值;

在pdb模式中,对于还没有单步执行到的代码,相关的变量的变更是无效的;

q 命令退出当前调试,进入重新从头开始调试,再次输入q,就会推出调试程序。

这种方式的调试,有一个弊端,就是只能一步一步的执行下去,如果程序有很多行,岂不是累死。

  五、使用pdb.set_trace()

#err_pdb.py
import pdb

s = '0'
n = int(s)
pdb.set_trace() #程序运行到这里会自动停止,等待命令
print(10 / n)

  我们可以使用l、c、n、p、q等命令来控制和查看程序

PS E:\Python3.6.3\workspace> python err_pdb.py
> e:\python3.6.3\workspace\err_pdb.py(7)<module>()
-> print(10 / n)
(Pdb) p s
'0'
(Pdb) l
  2     import pdb
  3
  4     s = '0'
  5     n = int(s)
  6     pdb.set_trace() #程序运行到这里会自动停止,等待命令
  7  -> print(10 / n)
[EOF]
(Pdb) n
ZeroDivisionError: division by zero
> e:\python3.6.3\workspace\err_pdb.py(7)<module>()
-> print(10 / n)
(Pdb) c
Traceback (most recent call last):
  File "err_pdb.py", line 7, in <module>
    print(10 / n)
ZeroDivisionError: division by zero

 

--结束END--

本文标题: python之错误调试

本文链接: https://www.lsjlt.com/news/181973.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python之错误调试
      无论谁写的程序,必定会存在bug,解决bug需要我们去调试程序。于是乎,在Python中,就会好几种调试手段,如print、assert、logging、pdb、pdb.set_trace()   一、使用print()函数直接打印 ...
    99+
    2023-01-31
    错误 python
  • 分析Python的错误,调试和测试方法
    本篇内容主要讲解“分析Python的错误,调试和测试方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析Python的错误,调试和测试方法”吧!  错误处理  在预防程序发生运行错误的时候,可...
    99+
    2023-06-02
  • thinkphp如何调试错误
    本篇内容介绍了“thinkphp如何调试错误”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、开启调试模式在使用 ThinkPHP 进行开发...
    99+
    2023-07-05
  • python之Windows调试
    Windows下IDLE调试先写个简单的程序做示例,代码如下打开idle,新建一个文件,点file---new file#!/usr/bin/env python# coding: utf-8__author__ = 'www.py...
    99+
    2023-01-30
    python Windows
  • PHP中如何实现调试和错误调试?
    在PHP中,调试和错误调试是开发过程中不可或缺的一部分。调试和错误调试可以帮助开发人员快速识别和解决应用程序中的错误,从而提高应用程序的稳定性和可靠性。本文将介绍PHP中如何实现调试和错误调试。一、错误调试在PHP应用程序中,错误可能会发生...
    99+
    2023-05-14
    调试工具 PHP调试 PHP错误调试
  • python之linux下pdb试调
    编写一个简单程序用pdb试调一下,代码如下#!/usr/bin/env python # coding: utf-8 __author__ = 'www.py3study.com&#...
    99+
    2023-01-30
    linux python 试调
  • Python详解之调试:pdb
    如果使用过微软技术的朋友应该体会过微软的Visual Studio系列IDE给debug程序带来的方便,换了个工作就没有Visual Studio了,对于我这种从未在非GUI环境下调试过程序的人来说实在有点不爽,今天花了点时间看了一下Py...
    99+
    2023-01-31
    详解 Python pdb
  • Python 面试必读:同步框架常见错误及调试方法。
    Python 面试必读:同步框架常见错误及调试方法 在 Python 编程中,同步框架是必不可少的工具,可以让我们更加高效地编写代码。但是,同步框架也会带来一些常见的错误,这些错误可能会让我们的代码出现崩溃、死锁等问题。本文将介绍一些常见的...
    99+
    2023-07-08
    面试 同步 框架
  • php如何调试sql语句错误
    本篇内容主要讲解“php如何调试sql语句错误”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何调试sql语句错误”吧!php调试sql语句错误的方法:1、通过die语句调试PHP SQL...
    99+
    2023-06-20
  • jmeter调试错误实例有哪些
    本篇内容主要讲解“jmeter调试错误实例有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jmeter调试错误实例有哪些”吧!一、前言在使用jmeter做接口测试的过程中大家是不是经常会遇到...
    99+
    2023-06-21
  • PHP中如何处理调试错误?
    PHP中如何处理调试错误?在开发过程中,我们经常会遇到各种各样的错误。调试错误是一个非常有挑战性的任务,因为我们需要找到错误的根本原因并修复它。本文将介绍一些常用的PHP调试技巧和最佳实践,以帮助我们更有效地处理和解决错误。启用错误报告在P...
    99+
    2023-12-09
    调试错误处理
  • c语言调试错误如何解决
    要解决C语言调试错误,可以按照以下步骤进行:1. 理解错误信息:仔细阅读编译器或调试器给出的错误信息,了解错误的类型和位置。错误信息...
    99+
    2023-08-24
    c语言
  • jmeter调试错误全集(入门必备)
    目录一、前言二、通过查看运行日志调试问题三、通过添加察看结果树调试问题四、通过添加调试取样器调试问题五、开启用户代理,结合fiddler抓包工具调试问题六. 总结一、前言 在使用jm...
    99+
    2022-11-12
  • 详解Python调试神器之PySnooper
    相信很多程序员在调试代码时,都用过 print。代码少还好说,如果是大型项目,面对众多 print 的输出结果,可能要头大了。 今天推荐一个 GitHub 热门开源项目:PySnoo...
    99+
    2022-11-12
  • Python IDE是否支持Django和NumPy的调试和错误处理?
    Python是一种广泛应用的编程语言,它有着丰富的库和工具,可以应用于众多领域。其中,Django和NumPy是Python的两个重要的库,用于Web开发和科学计算。在使用Python进行开发时,调试和错误处理是必不可少的环节。那么,Py...
    99+
    2023-07-31
    ide django numy
  • PHP中封装性的错误调试技巧
    引言:在开发PHP应用程序时,由于代码的复杂性和程序的规模,经常会遇到一些难以调试的错误。尤其是在采用面向对象编程(OOP)的情况下,如何快速定位问题所在变得更加重要。本文将介绍一些PHP中封装性的错误调试技巧,帮助开发人员更高效地解决问题...
    99+
    2023-10-21
    调试 技巧 封装性
  • pycharm的debug调试以及异常,Python 中错误的处理方式
    在b站看了详细的视频教程,做一个系统的总结。第一次写关于pycharm的debug调试以及python代码运行报错处理的帖子,错误地方请大家指出。 第一个部分:pycharm的debug调试 作为一个...
    99+
    2023-09-08
    python
  • 小程序真机调试提示系统错误
    Error: 系统错误,错误码:80051,source size 7935KB exceed max limit 2MB [20220929 16:18:58][wxfc8aa5984cac7f72] [1.06.2208010][win...
    99+
    2023-08-17
    小程序 javascript 前端
  • Python基础之(九)错误和异常
    >>> for i in range(10) File "<stdin>", line 1 for i in range(10) ^ SyntaxError:...
    99+
    2023-01-31
    异常 错误 基础
  • Python之debug调试的方法是什么
    今天小编给大家分享一下Python之debug调试的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。本文用的测试代码...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作