Python测试开发预习课7/23

1、什么是异常处理

什么异常:程序处理的过程中,出错了,会导致程序终止。

2、文件模式异常
print("start:")  #此语句被执行了
print(1/0)       #此语句也被执行了,但是出错了,造成了程序中断执行
print("end!")    #因为出现异常了,所以此语句被短路了

在这里插入图片描述

3、文件模式异常处理
print("start:")  #此语句被执行了
try:
    print(1/0)       #此语句也被执行了,但是出错了,造成了程序中断执行
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except:  #拦截错误,except:默认拦截所有的错误和异常。
    print("出现了一个错误,但是被我捕获到了!")
print("end!")    #因为出现异常了,所以此语句被短路了


#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述

4、如何知道哪句代码出现异常
print("start:")  #此语句被执行了
try:
    print(1/0)       #此语句也被执行了,但是出错了,造成了程序中断执行
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except Exception as e:  #拦截错误,except:默认拦截所有的错误和异常。
    print("出现的异常信息如下:",e)
print("end!")    #因为出现异常了,所以此语句被短路了

在这里插入图片描述

5、引入traceback包

在这里插入图片描述

import traceback

print("start:")  #此语句被执行了
try:
    print(1/0)       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except Exception as e:  #拦截错误,except:默认拦截所有的错误和异常。
    traceback.print_exc()#帮忙定位到出错代码行,给出错信息
print("end!")    #因为出现异常了,所以此语句被短路了


#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述

6、堆栈调用
import traceback


def a():
    print("func a start:")
    1/0
    print("func a start:")

def b():
    print("func b start:")
    a()
    print("func b start:")


def c():
    print("func c start:")
    b()
    print("func c start:")


print("start:")  #此语句被执行了
try:
    c()       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except Exception as e:  #拦截错误,except:默认拦截所有的错误和异常。
    traceback.print_exc()
print("end!")    #因为出现异常了,所以此语句被短路了


#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述
什么是堆栈?
Jvm的堆和栈的理解:
https://blog.youkuaiyun.com/qq_30764991/article/details/82194962

import traceback


def a():
    print("func a start:")
    1/0
    print("func a end:")

def b():
    print("func b start:")
    a()
    print("func b end:")


def c():
    print("func c start:")
    b()
    print("func c end:")


print("start:")  #此语句被执行了
try:
    c()       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except Exception as e:  #拦截错误,except:默认拦截所有的错误和异常。
    traceback.print_exc()
print("end!")    #因为出现异常了,所以此语句被短路了


#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述

import traceback

print("start:")  #此语句被执行了
try:
    1/0       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except ZeroDivisionError as e:  #拦截特定的异常 ZeroDivisionError。
    traceback.print_exc()
    print("除以0的异常出现了!")
except ValueError:
    print("出现了值的异常")

print("end!")    #因为出现异常了,所以此语句被短路了


#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述

7、出现值的异常
import traceback

print("start:")  #此语句被执行了
try:
    int("1.11")       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except ZeroDivisionError:  #拦截特定的异常 ZeroDivisionError。
    traceback.print_exc()
    print("除以0的异常出现了!")
except ValueError:
    print("出现了值的异常")

print("end!")    #因为出现异常了,所以此语句被短路了


#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述

8、当异常未拦截到的时候,程序一定会中断出错(特定异常未捕获到)
import traceback

print("start:")  #此语句被执行了
try:
    open("e:\\xxxxx.txt")       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except ZeroDivisionError:  #拦截特定的异常 ZeroDivisionError。(针对普通方法异常处理不一样)
    traceback.print_exc()
    print("除以0的异常出现了!")
except ValueError:
    print("出现了值的异常")

print("end!")    #因为出现异常了,所以此语句被短路了


#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述

9、添加except
import traceback

print("start:")  #此语句被执行了
try:
    open("e:\\xxxxx.txt")       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except ZeroDivisionError:  #拦截特定的异常 ZeroDivisionError。
    traceback.print_exc()
    print("除以0的异常出现了!")
except ValueError:
    print("出现了值的异常")
except:
    print("未知异常出现!")

print("end!")    #因为出现异常了,所以此语句被短路了


#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述

10、无异常的时候会执行正确的代码
import traceback

print("start:")  #此语句被执行了
try:
    open("e:\\xxxxx.txt")       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except ZeroDivisionError:  #拦截特定的异常 ZeroDivisionError。
    traceback.print_exc()
    print("除以0的异常出现了!")
except ValueError:
    print("出现了值的异常")
except:
    print("未知异常出现!")

print("end!")    #因为出现异常了,所以此语句被短路了


#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。
11、traceback.format_exc的使用
>>> help(traceback.format_exc)
Help on function format_exc in module traceback:

format_exc(limit=None, chain=True)
    Like print_exc() but return a string.
12、出现异常放在一个字符串里
import traceback

except_info = ""
print("start:")  #此语句被执行了
try:
    open("e:\\a.txt")       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except ZeroDivisionError:  #拦截特定的异常 ZeroDivisionError。
    except_info = traceback.format_exc()
    print("除以0的异常出现了!")
except ValueError:
    except_info = traceback.format_exc()
    print("出现了值的异常")
except:
    except_info = traceback.format_exc()
    print("未知异常出现!")
else:#如果try里面没有发生任何异常,则else会被默认执行,否则不执行else
    print("未发生异常!")


print("end!")    #因为出现异常了,所以此语句被短路了

print("出现的异常信息如下:",except_info)
#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述

13、有无异常均执行
import traceback

except_info = ""
print("start:")  #此语句被执行了
try:
    open("e:\\xxxxx.txt")       #此语句也被执行了,但是出错了,跳转到except部分去处理
    print("complete compute!")  #此语句被短路了
                     #在try里面的语句是顺序执行的
                     #当执行到某一句出错了,那么try后面的其他所有
                     #语句全部会被短路掉。
                     #出错的时候,会跳出try的代码块
except ZeroDivisionError:  #拦截特定的异常 ZeroDivisionError。
    except_info = traceback.format_exc()
    print("除以0的异常出现了!")
except ValueError:
    except_info = traceback.format_exc()
    print("出现了值的异常")
except:
    except_info = traceback.format_exc()
    print("未知异常出现!")
else:#如果try里面没有发生任何异常,则else会被默认执行,否则不执行else
    print("未发生异常!")
finally:
    print("此句话不管有没有异常均被执行!")

print("end!")    #因为出现异常了,所以此语句被短路了

print("出现的异常信息如下:",except_info)
#加了异常处理之后,程序可以全部执行完毕,并没有出现终止的情况。

在这里插入图片描述

14、异常的使用
while 1:
    try:
        content = int(input("请输入一个数字"))
    except:
        print("输入的内容是content,不是整数,请重新输入")
    else:
        break


print("你输入的数字是:",content)

在这里插入图片描述

15、文件模式异常处理
fp=""
try:#将所有出现异常的部分放在try里面
    fp = open("e:\\a.py")
    print(fp.read())
except:
    print("出现的文件操作错误")
finally:
    print("finally 被执行了!")
    if fp!="":
        fp.close()
        print("文件句柄已经被成功关闭!")

在这里插入图片描述

16、抛出异常
try:
    1/0
except:
    print("出现了异常!")
    try:
        2/0   #在except出现的异常,如果没有被拦截,一样会让程序崩溃掉!
    except:
        print("又出现了新的异常!")

print("done")

在这里插入图片描述

try:
    for i in range(5):
        if i==3:
            raise ZeroDivisionError("出现了除以0的错误!")
        print(i)
except ZeroDivisionError as e:
print("出现的异常是:",e)

在这里插入图片描述

总结:

1 异常不处理,会让程序中断
2 异常一般都是要使用try+except来拦截处理,保证不崩溃
3 拦截异常是个性异常在上,普遍异常在下,只要前面拦截到了,那么后续的异常拦截
就被默认短路了
4 except中如果也发生了异常,并没有被except,则程序也会崩溃
5 else 在未发生异常的时候会被处罚执行
6 finally不管发生还是不发生异常都会被执行,一般都是用于资源的释放和回收
7 可以自己使用raise来抛出指定的异常信息
8 如果想打印堆栈信息,要用traceback.print_exc,
获取报错堆栈信息的字符串,需要traceback.format_exc()
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值