python之异常处理

July 23, 2018 Python学习 访问: 27 次

语法错误:简单的来讲就是写的代码编译时错处,说明代码有关的语法写错了;

逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生成、计算或者输出结果需要的过程无法执行等

python一场是一个对象,表示错误或意外情况

在python检测到一个错误时,将触发一个异常

python可以通过异常传导机制传递一个异常对象,发出一个异常情况出现的信号
我们自己也可以在代码中手动触发异常

python异常也可以理解为:程序出现了错误而在正常控制流以外采取的行为

第一阶段:解释器触发异常,此时当前程序流将被打断
异常处理,如忽略非致命性错误、减轻错误带来的影响

异常的共用

错误处理

  1. python的默认处理:停止程序,打印错误消息
  2. 使用try语句处理异常并从异常中恢复

时间通知

  1. 用于发出有效状态信号(错误位置)

特殊情况处理

  1. 无法调整代码去处理的场景

终止行为

  1. try/finally语句可确保执行必须的结束处理机制

非常规控制流程

  1. 异常是一种高级跳转(goto)机制

检测和处理异常

异常通过tyr语句来检测

  1. 任何在try语句块中的代码都会被检测,以检查有无异常发生

try语句主要有两种形式

  1. try-expect:检测和处理异常
    > 1. 可以有多个expect
    > 2. 支持使用else子句处理没有探测异常的执行的代码
try:
    f = open("d:\\123\abc.txt","r")
except IOError, reason: # 这里的reason指的是可以把错误报错在reason的变量里面,用于以后的输出
    print("不能打开该文件"+reason)
except (exception1,exception2):#当一个except语句处理多个异常的情况下,错误类型要用元组
    pass
else: #except分句个数没有限制,但是else只能有一个
    pass
    # 当try中的代码没有产生任何的异常情况下才执行else中的代码
  1. try-finally:进检查一场并做一些必要的清理工作
    > 1.仅能有一个finall
try:
    pass
finally:
    pass #无论异常是否发生,finally子句都会执行,而且finally中的所有代码执行完毕后悔继续向上一层引发异常

try语句的复合形式

1.try-except-finally

try-except-else-finally

try:
    pass
except:#捕捉一切错误
    pass
except error_name:#捕捉特定的错误
    pass
else:
    pass#如果没有引发异常,就运行
finally:
    pass#总是运行此代码

自定义异常

raise语句可显式触发异常

raise[someException[,args[,traceback]]]
someException:可选,异常的名字
args: 可选,以元组的形势传递给异常的参数
traceback: 可选,一场触发时新生成的一个用于异常-正常化的跟踪记录,多用于重新引发异常时
def test(seq1,seq2):
    if not seq1 or not seq2:
        raise ValueError , "value must be empty!"
    print([(x,y) for x in seq1 for y in seq2])
list1 = ['a','b','c']
list2 = ['1','2','3']
list3 = []
test(list1,list2)
test(list1,list3)
C:\Users\WDM>python D:\study\python\learn\test1.py
[('a', '1'), ('a', '2'), ('a', '3'), ('b', '1'), ('b', '2'), ('b', '3'), ('c', '1'), ('c', '2'), ('c', '3')]
Traceback (most recent call last):
  File "D:\study\python\learn\test1.py", line 9, in <module>
    test(list1,list3)
  File "D:\study\python\learn\test1.py", line 3, in test
    raise ValueError , "value must be empty!"
ValueError: value must be empty!

添加新评论