Python练习-错误处理

本部分练习python中的异常处理,相当于Java中的try...catch...finally,不同的是:

  1. Python中的语句是try....except....finally
  2. Python中有try....except...else...finally语句,期中else语句是当没有异常捕获时执行;
  3. Python中主动抛出异常的语句时raise
# 1.try except 捕获error
import logging

try:
    print('try...')
    r = 10 / 2
    print('result:', r)
except ZeroDivisionError as e:
    print('except:', e)
else:
    print("No error")
finally:
    print('finally...')
print('END')

try:
    print('try...')
    r = 10 / 0
    print('result:', r)
except ZeroDivisionError as e:
    print('except:', e)
    # logging.exception(e)
    logging.exception("Logging Error")
else:
    print("No error")
finally:
    print('finally...')
print('END')


class myError(BaseException):
    pass


try:
    raise myError()
except myError as e:
    logging.exception(e)
    # raise

# 练习 根据异常堆栈定位错误,并修改语句
from functools import reduce


def str2num(s):
    # int(s) 根据堆栈修改
    return float(s)


def calc(exp):
    ss = exp.split('+')
    ns = map(str2num, ss)
    return reduce(lambda acc, x: acc + x, ns)


def main():
    r = calc('100 + 200 + 345')
    print('100 + 200 + 345 =', r)
    r = calc('99 + 88 + 7.6')
    print('99 + 88 + 7.6 =', r)


main()

上述代码中,最后的练习部分,异常堆栈输出为:

Traceback (most recent call last):
  File "C:\Users\lihongzhe\PycharmProjects\pyforwork\demo\errorHandling.py", line 63, in <module>
    main()
  File "C:\Users\lihongzhe\PycharmProjects\pyforwork\demo\errorHandling.py", line 59, in main
    r = calc('99 + 88 + 7.6')
  File "C:\Users\lihongzhe\PycharmProjects\pyforwork\demo\errorHandling.py", line 53, in calc
    return reduce(lambda acc, x: acc + x, ns)
  File "C:\Users\lihongzhe\PycharmProjects\pyforwork\demo\errorHandling.py", line 47, in str2num
    return int(s)
ValueError: invalid literal for int() with base 10: ' 7.6'

可以看到,错误是因为用int()函数对非整数进行了强转,因此改为float()即可。改后输出如下:

100 + 200 + 345 = 645.0
99 + 88 + 7.6 = 194.6 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值