python——异常处理

所有异常类都是继承Exception
Python 有两种错误很容易辨认:语法错误和异常。
即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。
运行期检测到的错误被称为异常。
大多数的异常都不会被程序处理,都以错误信息的形式展现在出来

捕获简单异常

try:
	# 语句块
	#这里放的是可能遇到异常的代码
except:
	# 异常处理代码
	# 遇到异常输出的代码
else:
	# 没有遇到异常时执行的代码块

finally:
	# 无论有没有异常都要执行的代码

注:这个语法,不会分辨是什么类型的异常,只要遇到异常就会执行except里面的代码块

捕获多个异常

try:
	# 可能存在异常的代码
except(异常名称 1,异常名称2,异常名称3):
	# 异常处理代码
	# 遇到异常时执行的代码
else:
	# 没有遇到异常时执行的代码块
finally:
	# 无论有没有异常都要执行的代码

注:这个语法只要遇到括号中的异常就执行except下的代码块,不会根据不同的异常执行不同的代码
并且这个不区分优先级

分类处理多个异常

try:
	可能存在异常的代码
except (异常名称1):
	# 异常1的处理代码
except (异常名称2):
	# 异常2的处理代码
else:
	# 没有遇到异常时执行的代码块
finally:
	# 无论有没有异常都要执行的代码

这个是有优先级的
执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。
如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。
如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。
如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

主动触发异常(抛出异常)

语法
raise [Exception [,args ] [,traceback]]

Exception是 异常的类型(例如ValueError),
参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None(空)" 就是异常错误信息
最后一个参数是跟踪异常对象,也是可选的
列子:

def not_zero(num):
    try:
        if num == 0:
            raise Exception('参数错误')
        return num
    except Exception as e :
        print(e) # 打印异常错误信息
not_zero(0)

返回异常发生位置

先导入traceback库
使用traceback.format_exc()函数或者 traceback.print_exc()
format_exc()返回字符串
print_exc()则直接给打印出来

使用案例:

import traceback
try:
    t=0
    if t==0:
        raise Exception('t==0了',)
except Exception as c:
    print(c)
    traceback.print_exc()
else:
    print("没有异常执行")
finally:
    print("有没有异常都要执行的")

自定义异常

可以通过创建一个新的异常类来拥有自己的异常。
异常类继承自 Exception 类,可以直接继承,或者间接继承

import traceback

class dj(Exception):
    def __init__(self,value):
        self.value=value

    def __str__(self):
        return repr(self.value)
        # 注:repr()函数简单来说就是转字符串的

try:

    3/0
except dj as c:
    print(c)
    traceback.print_exc()

else:
    print("没有异常执行")
finally:
    print("有没有异常都要执行的")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章