python测验7_Python学习系列 - 错误、调试和测试学习(七)

错误处理

在程序运行的时候可能会出现很多的问题,产生很多的错误。所以我们应该事先约定好出现错误应该返回的错误代码,这样我们在程序出现错误的时候就可以很快的找到错误的位置,然后进行修正。

return方式

用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,一旦出错还需要一层一层的向上报,直到某个函数可以处理这个错误为止。

def do_some(x):

return x / 2

def foo():

r = do_some(-2)

if r == -1:

return -1

return r

def bar():

r = foo()

if r == -1:

print("Error")

else:

print("OK")

bar()

运行结果:

Error

try...except...finally...方式

我们首先将可能会报错的代码放入try中进行运行;

如果执行出错,就会跳转到错误处理代码,也就是except中进行错误处理;

执行完except后如果有finally就会执行,没有就跳出该方法执行剩下的方法。

def foo():

try:

print("try...")

r = 100 / 0

print("return:", r)

except Exception as e:

print("except", e)

finally:

print("finally...")

print("end...")

foo()

运行结果:

try...

except division by zero

finally...

end...

根据上面方法的运行结果我们可以看出,代码由于出错并没有运行print("return:", r),而是直接运行错误代码的处理逻辑。

如果我们这里将代码进行修改的话:

def foo():

try:

print("try...")

r = 100 / 5

print("return:", r)

except Exception as e:

print("except", e)

finally:

print("finally...")

print("end...")

foo()

运行结果:

try...

return: 20.0

finally...

end...

这里我们就会看到错误处理逻辑并没有被执行,是因为try中的代码在运行的时候并没有出现错误。

记录错误

出现错误我们应该及时的记录下来,方便以后进行查询修改。同时我们也需要程序继续向下执行。

import logging

def foo(x):

return x / 0

def main():

try:

foo(100) * 2

except Exception as e:

logging.exception(e)

main()

print("END")

运行结果:

ERROR:root:division by zero

Traceback (most recent call last):

File "D:/WorkSpace/python/test.py", line 65, in main

foo(100) * 2

File "D:/WorkSpace/python/test.py", line 60, in foo

return x / 0

ZeroDivisionError: division by zero

END

可以看到程序在遇到错误的时候打印了错误信息并且直接向下继续执行了。

抛出错误

我们在写程序的时候可能会遇到错误,有时候我们不会在当前代码处进行处理,可能希望向上抛出到合适的位置进行处理。这时候我们就需要将错误向上进行抛出处理。

这里我们就需要用到一个关键词:raise,这个关键词就是可以将我们的错误进行抛出。

def foo(s):

n = int(s)

if n==0:

raise ValueError('invalid value: %s' % s)

return 10 / n

def bar():

try:

foo('0')

except ValueError as e:

print('ValueError!')

raise

bar()

运行结果:

Traceback (most recent call last):

File "D:/WorkSpace/python/test.py", line 88, in

bar()

File "D:/WorkSpace/python/test.py", line 82, in bar

foo('0')

File "D:/WorkSpace/python/test.py", line 76, in foo

raise ValueError('invalid value: %s' % s)

ValueError: invalid value: 0

ValueError!

在这里我们会发现,错误在foo()方法中被捕获,然后向上抛出到bar()方法中进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值