码迷,mamicode.com
首页 > 其他好文 > 详细

第二十二节课:异常

时间:2020-12-09 12:18:36      阅读:5      评论:0      收藏:0      [点我收藏+]

标签:range   报错信息   --   不能   任务   oat   top   用例   oss   

# 第23节课:异常
‘‘‘
本节概述:
1- 异常的概念
2- 异常的产生
3- 异常的捕获和处理
4- 函数调用战法
5- 自定义异常
‘‘‘
# 1- 异常的概念:就是报错.代码执行产生错误,无法继续
# a = 8956 / 0
# print (a) #打印报错:ZeroDivisionError: division by zero
# b = [1,2]
# c = b[2]
# print(c+39) #打印报错:IndexError: list index out of range
# 理解异常:
# *当解释器遇到错误的,无法执行的代码
# *中断当前代码的执行,抛出一个异常对象
# sdfsdf #直接执行报错:NameError: name ‘sdfsdf‘ is not defined
# NameError是异常对象的一种
# *开发者还可以自己定义异常对象
# *形形色色的异常,标识了不同的错误
# 例子:
# *输入0会导致当前程序异常退出
# while True:
# num = input(‘input a number:‘)
# print(‘100 / %s = %s‘ % (num,100.0/int(num)))
# 希望的行为:1.程序不要退出 2.提示用户输入错误 3.继续让用户重新输入数字,继续执行
# if过滤:事前处理.可处理已知的bug,如除数输入0是已知的
# 异常处理属于事后处理 即问题已经出现了,要去解决不让代码因报错而停止.可以有适当提示.

# 3- 异常的捕获和处理
# while True:
# num = input(‘input a number:‘)
# try:
# print(‘100 / %s = %s‘ % (num,100.0/int(num)))
# except ZeroDivisionError: #捕获一种异常,这种异常是已知的
# print (‘除数不能为0‘)
# except ValueError:
# print(‘只能输入数字哦!‘) #捕获多种异常

‘‘‘
捕获后得到详细的异常信息:
try:
ohmy
except NameError as e:
print(‘handle NameError:‘,e)
# e 就是异常对象
# 我们可以打印出储存里面储存的具体错误信息
‘‘‘
# 怎么打印报错具体信息实例:
# while True:
# num = input(‘input a number:‘)
# try:
# print(‘100 / %s = %s‘ % (num,100.0/int(num)))
# except ZeroDivisionError as e: #捕获一种异常,这种异常是已知的
# print (‘除数不能为0‘)
# print( e) #打印得报错具体信息:handle NameError: float division by zero
# except ValueError as v:
# print(‘只能输入数字哦!‘) #打印得:invalid literal for int() with base 10: ‘x‘
# print(v)
# except Exception: #查看可知这个Exception是前面两个异常类的父类.也可直接写作:
# except: #表示不管有什么错误,都执行冒号以后的操作
# except Exception as ree:
# print(‘异常了,这个异常是前面两种异常都没有抓到的其它异常‘,ree)
‘‘‘‘‘‘
‘‘‘
ZeroDivisionError 指明专门捕获ZeroDivisionError异常
NameError 指明专门捕获NameError异常
对应的处理代码区块
执行结果
是NameError 而不是 ZeroDivisionError
‘‘‘
# 怎么知道异常信息?
# import traceback
# while True:
# num = input(‘input a number:‘)
# try:
# print(‘100 / %s = %s‘ % (num,100.0/int(num)))
# except :
# print (‘除数不能为0\n‘+ traceback.format_exc())
# #如果输入的值不是数字,就会打印:ValueError: invalid literal for int() with base 10: ‘b‘
# #如果输入的数字是0.则会打印:ZeroDivisionError: float division by zero
# else: #注:如果前面抓到异常,else语句不执行,如果没有抓到异常才会执行这一句
# print(‘no exception之后就得放这个else,必须放在所有except代码块后面,finally之前‘)
# finally:#不管有没有抓到异常都会执行finally语句
# print(‘try except代码块的结束,要放finally语句‘)

# 4- 函数调用栈:
‘‘‘
1.文件读操作.txt .log 文件不存在会直接报错
fo=open(‘gfre‘)
2.异常机制使用场景:
boss布置任务:十个自动化测试用例的测试
小明如果跑到第三个出问题卡了,就得修好第三个之后才能跑下面的,如果有异常机制,就可以略过第三个就跑下面的.
直接跑完十个用例,然后反馈那几个有问题再针对性地修
‘‘‘
# 1.
# fo=open(‘gfre‘) #直接报错了:FileNotFoundError: [Errno 2] No such file or directory: ‘gfre‘
# try:
# fo = open(‘gfre‘)
# except:
# print(‘请检查文件路径‘)

# 异常的报错顺序:
def f3(): #相当于区
print(‘in f3 - begin‘)
b=4/0
print(‘in f3 - end‘)
def f2(): #相当于市
print(‘in f2 - begin‘)
f3()
print(‘in f2 - end‘)
def f1(): #相当于省
print(‘in f1 - begin‘)
f2()
print(‘in f1 - end‘)
f1() #相当于北京
‘‘‘
以下是报错信息:可能函数本身没错,所以,谁调用抛给谁,一层一层往上抛.f1报错,是f2导致的-->
抛给f2.f2报错是f3导致的-->抛给f3.f3报错是某一行代码导致的.揪出这行代码.这是一个连锁反应
C:\Users\86199\PycharmProjects\untitled9\venv\Scripts\python.exe C:/Users/86199/Desktop/python/第23节课异常.py
Traceback (most recent call last):
File "C:/Users/86199/Desktop/python/第23节课异常.py", line 118, in <module>
f1()
File "C:/Users/86199/Desktop/python/第23节课异常.py", line 116, in f1
f2()
File "C:/Users/86199/Desktop/python/第23节课异常.py", line 112, in f2
f3()
File "C:/Users/86199/Desktop/python/第23节课异常.py", line 108, in f3
b=4/0
ZeroDivisionError: division by zero
in f1 - begin
in f2 - begin
in f3 - begin
Process finished with exit code 1
‘‘‘

第二十二节课:异常

标签:range   报错信息   --   不能   任务   oat   top   用例   oss   

原文地址:https://www.cnblogs.com/66-liu/p/14088453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!