Python急速入门——(第十章:bug和调试)

这篇具有很好参考价值的文章主要介绍了Python急速入门——(第十章:bug和调试)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.常见bug类型


bug就是程序运行中出现的错误。

一般常见的bug类型有两类,一类是语法错误,这类错误比较好解决,程序会直接报红,然后我们在对应报红的位置查找问题即可;第二类是思路错误,这类错误就不是很好解决了,因为程序不会直接报错,只是运行的结果达不到我们的预期,这时候就需要一些调试技巧。但两种错误的本质,都是对基础知识掌握不牢固所导致的。


2.Python的异常处理机制


在一些情况下,即使程序出错了,我们也不希望它直接终止,而是捕获对应出错位置的异常信息,给出提示,而不影响后续代码的正常运行。这就是异常处理机制。先来看一段代码:

a = int(input('请输入第一个整数:'))
b = int(input('请输入第二个整数:'))
result = a / b
print('结果为:', result)

当我们输入10除0时,程序会直接报错并终止:

Python急速入门——(第十章:bug和调试),Python,Cyber Security,python,bug,开发语言

当我们不小心手抖,输进去字符串时:

Python急速入门——(第十章:bug和调试),Python,Cyber Security,python,bug,开发语言

上述两种情况都会直接报错,第一个异常是ZeroDivisionError,第二个异常是ValueError。现在我们不想让程序直接终止,使用异常捕获机制:

Python急速入门——(第十章:bug和调试),Python,Cyber Security,python,bug,开发语言

try:
    a = int(input('请输入第一个整数:'))
    b = int(input('请输入第二个整数:'))
    result = a / b
    print('结果为:', result)
except ZeroDivisionError:           # 捕获0不能做除数的异常
    print('对不起,除数不允许为0')
except ValueError:                  # 捕获输入字符的情况
    print('不能将字符串转化为数字')
except BaseException as e:          # 捕获所有异常
    print('出错了', e)
print('程序结束')

大家可以尝试一下执行上述代码,发现程序在遇到异常时不会直接终止了,而是先捕获异常信息,接着向下走。except也是遵从顺序结构,从上向下走的,先判断是不是ZeroDivisionError异常,再看是不是ValueError异常。BaseException是捕获所有异常,一般情况下仅写这一个except语句足以。


2.1try-except-else结构


try:
    a = int(input('请输入第一个整数'))
    b = int(input('请输入第二个整数'))
    result = a / b
except BaseException as e:
    print('出错了', e)
else:
    print('计算结果为:', result)

如果出错了,就走except语句;如果没出错,就走else语句。


2.2try-except-else-finally结构


Python急速入门——(第十章:bug和调试),Python,Cyber Security,python,bug,开发语言

try:
    a = int(input('请输入第一个整数'))
    b = int(input('请输入第二个整数'))
    result = a / b
except BaseException as e:
    print('出错了',e)
else:
    print('计算结果为:',result)
finally:
    print('谢谢您的使用')

finally是无论程序是否出错都一定会执行的语句,常用来释放try块中申请的资源。


2.3Python中常见的异常类型


异常 描述
ZeroDivisionError 除(或取模)零(所有数据类型)
IndexError 序列中没有此索引(index)
KeyError 映射中没有这个键
NameError 未声明/未初始化对象(没有属性)
SyntaxError Python语法错误
ValueError 传入无效的参数
print(10/0) # ZeroDivisionError

lst=[11,22,33,44]
print(lst[4]) # IndexError  索引从0开始

dic={'name':'张三','age':20}
print(dic['gender']) # KeyError

print(num) # NameError

int a=20 # SyntaxError

a=int('hello') # ValueError

3.traceback模块


我们在执行print(10/0)这段代码时,会报这样的错误:
Python急速入门——(第十章:bug和调试),Python,Cyber Security,python,bug,开发语言
这其实也是traceback模块的功能。

这一点我们还没学,先照着敲。

import traceback		# 导入模块

try:
    print('---------------------')
    print(1 / 0)
except:
    traceback.print_exc()

执行这段代码时,发现横线的位置每回执行时可能都会变,这一块的知识将在后续线程的学习中学到。

Python急速入门——(第十章:bug和调试),Python,Cyber Security,python,bug,开发语言

Python急速入门——(第十章:bug和调试),Python,Cyber Security,python,bug,开发语言

我们为什么需要这个模块?因为这些异常的细节有时候要被记录,存储到我们的日志文件中。我们会使用这个模块来进行异常的存储。


4.pycharm调试


Python急速入门——(第十章:bug和调试),Python,Cyber Security,python,bug,开发语言

Python急速入门——(第十章:bug和调试),Python,Cyber Security,python,bug,开发语言文章来源地址https://www.toymoban.com/news/detail-816059.html


到了这里,关于Python急速入门——(第十章:bug和调试)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1、Kafka急速入门

    1、Kafka实战应用场景         2、 Kafka基本概念  Kafka broker。kafka服务端,Consumer消费者   Producer生产者 Topic与分区是一对多的关系;offset是消息分区中的唯一标识,通过offset定位具体的分区找到消息所在。 分区:可看成是一个可追加的日志文件。 分区是有序的,Topic是无序

    2024年02月08日
    浏览(45)
  • Java规则引擎Drools急速入门

    1.Drools规则引擎简介 (1)什么是规则引擎 ​ 全称为业务规则管理系统,英⽂名为BRMS(即 Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理

    2024年02月04日
    浏览(61)
  • 第十章 Python第三方库概览

    10.1 Python第三方库的获取和安装 Python第三方库依照安装方式灵活性和难易程度有三个方法: pip工具安装、自定义安装和文件安装 。 10.1.1 pip工具安装 最常用且最高效的Python第三方库安装方式是采用pip工具安装。pip是Python官方提供并维护的在线第三方库安装工具。 使用pip安装

    2024年02月07日
    浏览(58)
  • python笔记:第十章开箱即用的模块

    任何python程序都可以作为模块导入,并标明程序(模块)的位置 会在该文件夹里面自动生成一个 __pycache__ 文件夹,包含处理后的文件。(可删除,无影响) 在hello.py里面编写函数 在t13.py里面调用模块函数 运行结果 检查模块是作为程序运行还是被导入到另一个程序 如:在

    2024年02月17日
    浏览(48)
  • 第十章:C语言的调试

            很多小伙伴刚开始听到C语言的调试,这是个啥 ,表示很怀疑,敲代码不就是直接就是干嘛 ,结果很多小白们,一运行错误多的数都数不过来 。就开始这改改,那删删,莫名奇妙就运行成功了 。到最后都不知道到底那错了。有一种小朋友是否有多问号的感觉 。可想

    2024年02月06日
    浏览(26)
  • 使用 Python 和 Pygame 制作游戏:第九章到第十章

    原文: inventwithpython.com/pygame/chapter9.html 译者:飞龙 协议:CC BY-NC-SA 4.0           推星星是 Sokoban 或“箱子推动者”的克隆。玩家位于一个房间,里面有几颗星星。房间中的一些瓷砖精灵上有星星标记。玩家必须想办法将星星推到有星星标记的瓷砖上。如果墙壁或其他星星

    2024年01月22日
    浏览(74)
  • 【Three.js】第十章 Debug UI 调试界面

    每个创意项目的一个重要方面是使调试变得容易并调整您的代码。开发人员(您)和从事该项目的其他参与者(如设计师甚至客户)必须能够更改尽可能多的参数。 你必须考虑到这一点,以便他们找到完美的 颜色、速度、数量 等,以获得 最佳体验 。您甚至可能会得到看起

    2024年02月21日
    浏览(52)
  • (数字图像处理MATLAB+Python)第十章图像分割-第一、二节:阈值分割和边界分割

    图像分割 :在对图像的研究和应用中,人们往往仅对图像中的某些目标感兴趣,这些目标通常对应图像中具有特定性质的区域。图像分割是指把一幅图像分成不同的具有特定性质区域的图像处理技术,将这些区域分离提取出来,以便进一步提取特征和理解 图像分割方法多种

    2024年02月16日
    浏览(65)
  • 第一阶段-第十章 Python基础的综合案例(数据可视化-折线图可视化)

      说明:该文章是学习 黑马程序员 在B站上分享的视频 黑马程序员python教程,8天python从入门到精通 而记录的笔记,笔记来源于本人。 若有侵权,请联系本人删除 。笔记难免可能出现错误或笔误,若读者发现笔记有错误,欢迎在评论里批评指正。此笔记对应的doc文件的百

    2024年02月16日
    浏览(51)
  • (数字图像处理MATLAB+Python)第十章图像分割-第四,五节:分水岭分割和综合案例

    分水岭分割 :图像处理中常用的一种分割方法,它基于图像中灰度或颜色的变化来划分不同的区域。分水岭分割算法的原理是基于地理学上的分水岭概念。将图像看作一个 地貌图 ,在图像中低洼的部分被看作水池,而高处则表示山脉。通过在图像中加入水并让其逐渐充满,

    2024年02月10日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包