Python中异常处理

Posted 球球64

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中异常处理相关的知识,希望对你有一定的参考价值。

高级语言通常都配置了一套try...except...finally的错误处理机制。

1、我们先看一个try的机制

try:
res=1/0
except ZeroDivisionError as e:
print("出错了,除数不能为0",e)
运行结果为:
出错了,除数不能为0 division by zero
当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果只选出错,则后续代码不会执行
而是直接跳转至错误处理代码,即except语句块

2、另外一个例子:
l=[]
dic={}
try:
print(dic[‘name‘])
print(l[-1])
except KeyError as e:
print(‘字典key不存在‘,e)
except IndexError as e:
print("出错了,下标越界",e)
except Exception as e:#捕捉所有的异常
print("未知异常",e)
else:
print("没有出现异常...")
finally:#不管出现 异常和不出现异常,都会执行
print("什么时候执行finally")
输出结果:

字典key不存在 ‘name‘
什么时候执行finally

key不存在,我们就抛出一个keyerror的错误,下标越界,我们就抛出一个indexerror的错误

如果没有错误,就在except语句块后面加一个else,当没有错误发生时,就自动执行else

finally是不管什么时候都执行的语句

3、记录错误

如果不捕获错误,自然可以让python解释器来打印出错误堆栈,但是程序也被结束了,既然我们能捕获错误,就

可以把错误打印出来,然后分析错误,同时让程序执行下去

Python内置的loging模块可以记录错误

import logging

def foo(s):
    return 10 / int(s)

def bar(s):
    return foo(s) * 2

def main():
    try:
        bar(‘0‘)
    except Exception as e:
        logging.exception(e)

main()
print(‘END‘)
输出结果

END
ERROR:root:division by zero
Traceback (most recent call last):
File "C:/Users/zyq64/PycharmProjects/1018/day10/记录错误.py", line 12, in main
bar(‘0‘)
File "C:/Users/zyq64/PycharmProjects/1018/day10/记录错误.py", line 8, in bar
return foo(s) * 2
File "C:/Users/zyq64/PycharmProjects/1018/day10/记录错误.py", line 5, in foo
return 10 / int(s)
ZeroDivisionError: division by zero

同样是出错,但是程序打印完错误信息后会继续执行,并正常退出

4、主动抛出错误 raise

try:
10 / 0
except ZeroDivisionError:
raise ValueError(‘input error!‘)
输出结果:

Traceback (most recent call last):
File "C:/Users/zyq64/PycharmProjects/1018/day10/异常处理.py", line 38, in <module>
10 / 0
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/Users/zyq64/PycharmProjects/1018/day10/异常处理.py", line 40, in <module>
raise ValueError(‘input error!‘)
ValueError: input error!














































以上是关于Python中异常处理的主要内容,如果未能解决你的问题,请参考以下文章

使用片段中的处理程序时出现非法状态异常

你如何在 python 中处理 graphql 查询和片段?

Java异常处理机制

PCL异常处理:pcl 1.8.13rdpartyoostincludeoost-1_64oost ypeofmsvc ypeof_impl.hpp(125): error(代码片段

python常用代码片段总结

常用python日期日志获取内容循环的代码片段