从零开始的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或者快捷键
最后根据调试结果修改代码,调试完成后再点一下小圆点取消调试断点。
本节完。