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()