Python-35章 异常处理

#执行程序

print(1/0)
#报错
Traceback (most recent call last):
  File "I:/python文件/python入门/week3/异常处理.py", line 6, in <module>
    print(1/0)
ZeroDivisionError: division by zero

try…

#当程序执行时遇到错误,系统就会抛出异常,
#处理异常:在Python中通过try...except来处理错误
try:
    print(1/0)
except ZeroDivisionError:
    print("出错了")
# 输出:出错了
print("嗯哼")

此时程序遇到错误也可以正常向下执行,并且抛出一个你指定的错误

exception

exception:把所有的错误,都帮你处理了

try :
    print(1/10)
    f = open("xxx",mode = 'r')
except Exception:
    print("出错了")
#不同的问题不同的抛异常
try :
    print(1/10)
    f = open("xxx",mode = 'r')
except ZeroDivisionError:
    print("错误:print")
except FileExistsError:
    print("错误:文件不存在")
但是,当try里面的遇到错误,就会直接跳过下面的直接执行except,剩下的不执行
所以,一般最后写一个Exception用来兜底
try :
    print(1/10)
    f = open("xxx",mode = 'r')
except ZeroDivisionError:
    print("错误:print")
except FileExistsError:
    print("错误:文件不存在")
else:
    # 当try中代码不出错的时候,自动执行里面的内容
    pass
finally:
    #不管执行处不出错,最终都要走finally,一般用来收尾
    pass
# 如何手动抛出异常
def cul(a,b):
    if (type(a) == int or type(a) == float) and (type(b) == int or type(b)):
        return a + b
    else:
        raise Exception("不能处理")
#如何自己定义异常
#随便写一个类,类只要继承了Exception 这就是一个异常类,就能作为raise的对象
class baoException(Exception):
    pass
def cul(a,b):
    if (type(a) == int or type(a) == float) and (type(b) == int or type(b)):
        return a + b
    else:
        raise baoException("不能处理")

cul("就不放",3)
#输出:__main__.baoException: 不能处理
#baoException可以被自己定义,但是要直观,见名知其义
class baoException(Exception):
    pass
def cul(a,b):
    if (type(a) == int or type(a) == float) and (type(b) == int or type(b)):
        return a + b
    else:
        raise baoException("不能处理")
try:
    cul("就不放",3)
except baoException:
    print("出错了")
# 输出:出错了 但是此时只能看到出错了,看不到哪一行什么错误

堆栈信息

#堆栈信息  导入模块
import traceback
class baoException(Exception):
    pass
def cul(a,b):
    if (type(a) == int or type(a) == float) and (type(b) == int or type(b)):
        return a + b
    else:
        raise baoException("不能处理")
try:
    cul("就不放",3)
except baoException:
    ret = traceback.format_exc() #查看堆栈信息
    print(ret)  #输出堆栈信息
    print("出错了")
# 输出:出错了 但是此时只能看到出错了,看不到哪一行什么错误
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章