异常
语法规则
try:
pass
except Exception:
raise Exception
else:
pass
finally:
pass
- try后面必须跟上except
- try加上自己的代码块
- except只有在函数中才能使用return
- except加上要捕获的异常类
- finally不管是否发生异常,始终都会执行
try:
print(a) #出现异常时直接到except NameError:,没执行i = 1 / 0
i = 1 / 0
# 要捕获的异常名NameError要和可能出现的异常名相对应,否则无下面的效果
#except NameError: #当程序出异常时会运行下行代码,没异常正常运行上面的代码
# print('出现异常')
except (NameError,ZeroDivisionError): #当程序出异常时会运行下行代码,没异常正常运行上面的代码
print('出现异常')
except (NameError,ZeroDivisionError) as e: #e代表刚刚捕获的异常对象
print(e) #name 'a' is not defined
使用规则
try:
可能出现异常的代码
except Exception: #Exception代替所有异常的类型,相当于所有异常的父类
抛出或者返回异常
else:
没有报错执行
finally: #不管前面是否出异常,都执行
以上执行完执行
实例
def file_test():
try:
with open("a.py","r") as f:
f.write("aaa")
except:
print("出错误")
print(e) #[Errno 2] No such file or directory: 'a.py'
else:
print("没出错")
raise NameError #抛出错误
finally:
print("总会被执行")
print("hello Python")
file_test()
- 将可能会发生异常的代码放在try中,就可以得到异常,并做相应处理
- except用来接收异常,并且可以抛出或者返回异常
- else在没有异常的时候会执行
- finally不管是否有异常,都会执行
异常层次结构
- 在Python中所有的异常都是继承BaseException
- 代码中会出现异常都是Exception的子类,因此在except中只需要在最后加上Exception即可
- 在抛出异常的时候,会从上到下依次对比异常,找到之后就不会再往后查找
断言assert
assert 1 == 1
assert 1 == 2
”“”
Traceback (most recent call last):
File "/home/xiaoge/PycharmProjects/spider/venv/try.py", line 2, in <module>
assert 1 == 2
AssertionError
“”“
- 断言语句是将调试断言插入程序的一种便捷方式
- 断言是为了查找程序的异常然后终止程序便于我们调试
assert的语法规则是:
- 表达式返回True不报错
- 表达式返回False报错,报AssertionError