python基础刻意练习-- Task 8 异常处理

Day 11

作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这一节我们会详细说说这个错误和异常的处理。

1、python的标准异常总结

yczj

2、try-except 语句
  • 其基本格式为:
try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码
  • 让我们用一个例子来看看try的机制:
# example 1
try:
    f = open('.\\study.txt')
    print(f.read())
    f.close()
except OSError:
    print('打开文字出错')   # 打开文字出错

try 语句按照如下方式工作:

  • 首先,执行try子句(在关键字try和关键字except之间的语句)
  • 如果没有异常发生,忽略except子句,try子句执行后结束。
  • 如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和except之后的名称相符,那么对应的except子句将被执行。最后执行try语句之后的代码。
  • 如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
# example 2
try:
    f = open('.\\study.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文字出错\n原因是:' + str(error))
'''
打开文字出错
原因是:[Errno 2] No such file or directory: '.\\study.txt'
'''
  • 一个try语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。例如:
try:
    int('找错误')
    s = 666 + 22
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))
except TypeError as error:
    print('类型出错\n原因是:' + str(error))
except ValueError as error:
    print('数值出错\n原因是:' + str(error))
except NameError as error:
    print('名称出错\n原因是:' + str(error))
  • 一个 except 子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。
try:
    int('找错误')
    s = 666 + 22
    f = open('test.txt')
    print(f.read())
    f.close()
except (OSError , TypeError , ValueError , NameError) as error:
    print('出错\n原因是:' + str(error))
3、 try-except-finally 语句
  • 语句的基本格式为:
try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码
finally:
    无论如何都会被执行的代码
  • 不管try子句里面有没有发生异常,finally子句都会执行。
  • 如果一个异常在try子句里被抛出,而又没有任何的except把它截住,那么这个异常会在finally子句执行后被抛出。
def QAQ(x,y,z):
    try:
        answer = (x + y)/z
        print('The answer is :', answer)
    except (OSError, TypeError, ValueError, NameError, ZeroDivisionError) as error:
        print('Found error!\n原因是:' + str(error))
    finally:
        print('Good job!')
QAQ(1,2,3)
# The answer is : 1.0
# Good job!
QAQ(1,2,'3')
# Found error!
# 原因是:unsupported operand type(s) for /: 'int' and 'str'
# Good job!
QAQ(1,2,0)
# Found error!
# 原因是:division by zero
# Good job!
4、raise语句
  • Python 中使用raise语句抛出一个指定的异常。
try:
    raise NameError('Hello world!')
except NameError:
    print('mission success!')    # mission success!

备注:

学习参考资料:
https://mp.weixin.qq.com/s?__biz=MzIyNDA1NjA1NQ==&mid=2651011483&idx=1&sn=bb0a0b65512999e54e61d6ead5185a64&chksm=f3e35e03c494d715da9fff5be8ee1e8ff1e91dd363817f712c0e4cf65826990e7cfd16ad9ccb&mpshare=1&scene=1&srcid=&sharer_sharetime=1572387356234&sharer_shareid=8c49d4226c319addceef298b781f6bb7&key=edde10a8bf3931373245d8d5e6f10b6ccd96b93d19b88af9ca607c7906f41bf9298d5adf295023080120c71642a9f4b41045682f7bccc858e68d43617c4514e63596e6d1df0a05aee0e086f1ca5a5598&ascene=1&uin=MTgxNzI3MTY0MQ%3D%3D&devicetype=Windows+10&version=62060841&lang=zh_CN&pass_ticket=haPIql8hq15zwkRdno8SQm%2FdJdZB9XAimfO8R%2BgCNHXVcoXcQrnWzGgU%2FiyaHTO9

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值