标签:code 执行 代码 ber not print traceback user params
高级语言通常都配置了一套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!
标签:code 执行 代码 ber not print traceback user params
原文地址:https://www.cnblogs.com/qiuqiu64/p/10269232.html