当前位置: 首页 > news >正文

从零开始的python学习(六)P81+P82+P83+P84+P85

本文章记录观看B站python教程学习笔记和实践感悟,视频链接:【花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p=6&share_source=copy_web&vd_source=404581381724503685cb98601d6706fb

上节课学习本章内容,本章习题,以及章节实战演练——实战一车牌归属地,实战二统计指定字符出现的字数,实战三格式化输出商品信息,实战四使用正则表达式提取图片网址,本节课学习bug的由来和分类,python中的异常处理,raise关键字的使用,python中常见的异常类型,PyCharm的程序调试。

1.bug的由来和分类

bug指的是检测并排除程序或机器中的故障。下面是bug的分类:

首先是粗心导致的错误

 解决方案:注意冒号,注意缩进,注意符号的中英文,注意运算符不要弄混。

2.python中的异常处理

当代码逻辑没有错误,但是用户输入能出错。例如下面的代码:

num1=int(input('请输入一个整数'))
num2=int(input('请输入另一个整数'))
result=num1/num2
print('结果:',result)

当执行输入10和2的时候:

但是当输入10和0的时候就报错了

如果用户不小心输入一个非整数或者0就会报错了。那么像这种情况我们可以使用异常处理机制。

第一种结构:

首先使用try-except机制,基本格式为:

#ZeroDivisionError和ValueError和BaseException都是异常处理的常见情况,要根据具体情况替换
try:
    pass(这里填可能出现异常的代码)
except ZeroDivisionError:
    pass(这里填一旦出现异常要返回什么)
回到刚刚除数为0报错实例,为了不让它返回异常:
try:
    num1 = int(input('请输入一个整数'))
    num2 = int(input('请输入另一个整数'))
    result = num1 / num2
    print('结果:', result)
except ZeroDivisionError:
    print('除数为零')

除了不为零的情况其他也要考虑到,也就是使用多except情况

注意捕获异常是有顺序额的,从上到下的按照从子类到父类的顺序。因为在出现错误的时候,它会按照从上到下去一个个匹配,如果第一个except匹配不上就去匹配第二个except......语法结构如下:

#ZeroDivisionError和ValueError和BaseException都是异常处理的常见情况,要根据具体情况替换
try:
    pass(先写可能会抛出异常的代码)
except ZeroDivisionError: #这里写异常情况A
    pass(再写报错后执行的代码)
except ValueError: #这里写异常情况B
    pass(报错后执行的代码)
except BaseException: #这里写异常情况C
    pass(报错后执行的代码)

将除法那个例子改装,示例如下:

try:
    num1 = int(input('请输入一个整数'))
    num2 = int(input('请输入另一个整数'))
    result = num1 / num2
    print('结果:', result)
except ZeroDivisionError: #这里写异常情况A
    print('除数为零')
except ValueError: #这里写异常情况B
    print('不能将字符串转成整数')
except BaseException: #这里写异常情况C
    print('未知异常')

第二种结构:

先看try-else结构,语法格式如下:

try:
    pass
except A: #这里写异常情况A
    pass #当出现这种异常应该怎么处理
except B: #这里写异常情况B
    pass #当出现这种异常应该怎么处理
else:
    pass #正常执行应该怎么处理

 实例与解释:

try:
    num1 = int(input('请输入一个整数'))
    num2 = int(input('请输入另一个整数'))
    result = num1 / num2
    #这个位置本来是放如果没有异常怎么处理
except ZeroDivisionError:
    print('除数不能是零')
except ValueError:  # 这里写异常情况B
    print('不能将字符串转成整数')
except BaseException: #这里写异常情况C
    print('未知异常')
else:
    print('结果:', result) #当出现这种异常应该怎么处理

 第二个结构就是比前一个结构多了一个finally,就是无论有没有异常都要输出这个结果,比喻一下


try:
    让我们一起包饺砸 #可能会出现异常的程序
except 不爱吃饺子:  #这里写异常情况A
    print('过年怎么能不吃饺子呢')
except 我压岁钱呢:  #这里写异常情况B
    print('爸妈先帮你收起来')
else:
    print('饺子馅就应该是鸡汁味的') #正常进行应该怎么处理
finally:
    print('大过年的') #正常异常都得输出这个

还是除数这个例子实例如下:

try:
    num1 = int(input('请输入一个整数'))
    num2 = int(input('请输入另一个整数'))
    result = num1 / num2
    #这个位置本来是放如果没有异常怎么处理
except ZeroDivisionError:
    print('除数不能是零')
except ValueError:  # 这里写异常情况B
    print('不能将字符串转成整数')
except BaseException: #这里写异常情况C
    print('未知异常')
else:
    print('结果:', result) #当出现这种异常应该怎么处理
finally:
    print('程序执行结束')

 

3.raise关键字的使用

实例以及解释如下:raise的描述信息只有在异常的时候才会抛出

try:
    gender=input('请输入你的性别:')
    if gender!='男' and gender!='女':
        raise Exception('性别只能是男或女') #raise后面是抛出异常对象的描述信息,如果没有异常就执行else了;如果有异常就不会执行else直接执行最后一行的描述信息的输出
    else: #如果没有异常
        print('您的性别为:',gender)
except Exception as e: #给Exception起一个别名叫e
    print(e)

4.python中常见的异常类型

代码实例如下: 

#下面演示一下各种异常的实例
#注意在实际演示之前,想要看看每一种情况会报什么错,必须把其他的情况注释掉
#(1)ZeroDivisionError  适用于0做除数
print(10/0)
  #解决方案:使用try-except

#(2)indexError  是索引出错的时候产生的异常,一般出现在列表取值的时候
lst=[10,30,50,90]
print(lst[4]) #索引下标从0开始只能到3

#(3)keyError 字典取值的时候取得是字典不存在的索引
d={'name':'ysj','age':'20'}
print(d['gender'])

#(4)NameError 使用一个没有声明的变量
print(hello)

#(5)SyntaxError 语法错误
print('hello)

#(6)ValueError  值传入异常
print(int('a'))

#(7)AttributeError  属性或方法不存在的异常
i=10
print(i.name)

#(8)TypeError  类型不合适
print('hello'+123)

#(9)IndentationError  缩进有问题
   print('Hello')

5.PyCharm的程序调试 

断点一般设置在循环处,只需要将光标放在这里航的行标上,点击左键就会出现一个红色的圆点

三种方式进入程序调试窗口,可以点右上角的小虫,或者debug或者快捷键

 

 

最后根据调试结果修改代码,调试完成后再点一下小圆点取消调试断点。

本节完。 

相关文章:

  • Vitis HLS中的hls::vector详解 矢量数据类型 单指令流多数据流 (SIMD)
  • python2和python3的区别
  • 基于SpringBoot+Vue+uniapp的高校招聘小程序+LW参考示例
  • 二叉树的层序遍历
  • Implementing SAP BPC Embedded - 2nd Edition
  • 【unity】GPU顶点动画
  • 【推理】大模型ReasonGraph:推理路径的可视化论文及代码分析
  • 神聖的綫性代數速成例題3. 矩陣列數的極限、矩陣範數、行列式的計算
  • 【Agent】OpenManus 项目架构分析
  • LLMs之CoD:《Chain of Draft: Thinking Faster by Writing Less》翻译与解读
  • springboot+vue如何前后端联调,手搓前后端分离项目
  • 实验- 分片上传 VS 直接上传
  • redis终章
  • 五大基础算法——枚举算法
  • 蓝桥杯备赛 Day0_移动零
  • 从Online Softmax到FlashAttention
  • 100.HarmonyOS NEXT跑马灯组件教程:实际应用与场景示例
  • yungouos微信扫码登录demo示例(支持个人免费)
  • 使用c#进行串口通信
  • Python中@contextmanager上下文管理器
  • 人民日报钟声:国际社会应共同维护科学溯源的正确方向
  • 国务院食安办:加强五一假期食品生产、销售、餐饮服务环节监管
  • 中国科学院院士张泽民已任重庆医科大学校长
  • 徐徕任上海浦东新区副区长,此前已任区委常委
  • 辽宁辽阳市白塔区一饭店火灾事故举行新闻发布会,现场为遇难者默哀
  • 4月制造业PMI为49%,比上月下降1.5个百分点