前言
- 在Python中错误分为语法错误和异常两个类,可以理解错误和异常是一个东西,因为在处理的时候方法都一样。出错后就会导致代码中断,无法运行。解决的方法就是使用处理异常代码块
一.处理异常
- 处理异常的基本语法
try:
#可能会发生异常的代码块
except:
#发生异常后需要执行的代码块
- 如果能提前猜测到会出现什么异常可以加上异常类型。
try:
#可能会发生异常的代码块
except 异常类型:
#发生异常后需要执行的代码块
- 也可以把所有可能出现的异常列举出来
try:
#可能会发生异常的代码块
except 异常类型:
#发生异常后需要执行的代码块
except 异常类型:
#发生异常后需要执行的代码块
except 异常类型:
#发生异常后需要执行的代码块
......
except Exception as e:
print("未知错误:", e)
如果没有捕获检测到的异常,而且没有except Exception as e语句,那么系统肯定会抛出异常。有了except Exception as e语句,就会把不能提前知道的异常,也就是未知异常捕获到放到e中。
当然处理异常语法中可以如下,只有两行基本语句
try:
#可能会发生异常的代码块
except Exception as e:
print("未知错误:", e)
- Exception 是所有异常类的父类,如果不能提前知道需要捕获的异常是什么,那么就可以使用Exception匹配所有可能出现的异常。
二.finally子句
- 无论是否捕获了异常都会执行
try:
# 检测异常
except:
# 捕获异常后执行的代码块
finally: #finally这个无论如何都执行的特性在数据库和文件处理中相当有作用。
#无论如何都会执行的代码块
三.try-except-else语句
try:
#检测异常
except:
#捕获异常
else:
#程序正常执行
四.抛出异常
- 抛出异常是我们主动抛出异常,
- 测试一种机器的时间机制,如果超过这个时间则说明机器测试失败,否则成功。
起作用的主要是raise Exception()语句,此语句可以把用户想抛出的异常抛出。
def test(level):
if level>5:
raise Exception("测试失败")
try:
test(5)
except Exception as e:
print(e)
else:
print("测试成功")
五.自定义异常
Python虽然有许多内置的异常类但是只能满足大部分需求,还有一些需求无法满足。这个时候就需要自定义异常了。
- 自定义异常应该继承自Exception类,直接和间接继承都可以。
- 异常实际上也是一个类,工作机制大概是这样的,在类中定义一个魔法方法__str__(),用于创建对象时返回一些自定义的信息,比如:在创建对象的时候,因为语法错误,触发__str__()运行,返回信息,而这些信息被raise语句捕获从而报出红色错误。通过下面的代码理解这句话
class MyException(Exception):
def __init__(self):
pass
def __str__(self):
return "这是一个自定义异常"
def raise_customer_exception():
raise MyException()
raise_customer_exception()
六.断言
- 断言assert用于判断一个表达式是否成立,表达式是False的时候触发异常。
- 断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况。例如:判断是否为windows系统,如果是则执行下面的代码,如果不是则不执行。
assert expression
等价于
if not expression;
raise AssertionError
后面还可以跟参数
assert expression arguments
等价于
if not expression
raise AssertionError(arguments) - 判断当前系统是都为windows系统
import sys
assert ('windows' in sys.platform)