• Python学习之路(十八):基础知识之异常处理


    异常就是导致代码无法正常运行的错误。

    1.异常出现的原因

    (1)当运用代码处理的问题不确定时;

    (2)当从外部接口导入文件进行处理时;

    (3)多行异常出现的原因:在嵌套调用时内部出现了问题,因而在外部调用时会逐层显示错误信息。

    2.异常处理的结构

    (1)分支结构

     1 l = ['login', 'register']
     2 for num, i in enumerate(l, 1):
     3     print(num, i)
     4 try:
     5     num = int(input('num>>>'))  # 当输入的值非数值时报错
     6 except ValueError:  # 当输入的值非数值时报错ValueError
     7     print('请输入数字!')
     8 try:
     9     print(l[num - 1])
    10 except IndexError:  # 只能处理一种异常
    11     print('输入的数字超过范围!')

    (2)多分枝合并

    1 l = ['login', 'register']
    2 for num, i in enumerate(l, 1):
    3     print(num, i)
    4 try:
    5     num = int(input('num>>>'))
    6     print(l[num - 1])
    7 except (ValueError, IndexError):
    8     print('您输入的内容不合法!')

    (3)万能异常

     1 def buy():
     2     print('订货')
     3     1/0
     4 def return_goods():
     5     print('退货')
     6     []
     7 def check():
     8     print('查看订单')
     9     {}
    10 def main():
    11     l = [('订货', buy), ('退货', return_goods), ('查看订单', check)]
    12     while True:
    13         for num, i in enumerate(l, 1):
    14             print(num, i[0])
    15 
    16         num = int(input('num>>>'))
    17         print(l[num - 1])
    18         try:
    19             func = l[num - 1][1]
    20             func()
    21         except Exception as e:  # 将错误信息传给e
    22             print(e)
    23             print(e.args, e.__traceback__.tb_lineno, e.__traceback__.tb_frame)
    24             # 通过e可以调用查看错误的详细信息
    25             print('用户在操作%s时产生错误' % l[num - 1][0])
    26 main()

    (4)万能异常结合分支结构

     1 def buy():
     2     print('订货')
     3     1/0
     4 def return_goods():
     5     print('退货')
     6     []
     7 def check():
     8     print('查看订单')
     9     {}
    10 def main():
    11     l = [('订货', buy), ('退货', return_goods), ('查看订单', check)]
    12     while True:
    13         for num, i in enumerate(l, 1):
    14             print(num, i[0])
    15         try:
    16             num = int(input('num>>>'))
    17             print(l[num - 1])
    18             func = l[num - 1][1]
    19             func()
    20         except (ValueError, IndexError):  # 当输入出现这两种错误时打印输入内容不合法
    21             print('您输入的内容不合法!')
    22         except Exception as e:  # 万能异常捕捉应该放在分支后面执行
    23             print(e)
    24             # print(e.args, e.__traceback__.tb_lineno, e.__traceback__.tb_frame)
    25             # 通过e可以调用查看错误的详细信息
    26             print('用户在操作%s时产生错误' % l[num - 1][0])
    27 main()

    (5)else分支

     1 try:
     2     print('aaa')
     3     name
     4     [][1]
     5 except NameError:
     6     print('name error')
     7 except IndexError:
     8     print('index error')
     9 else:  # 当try中的代码不发生异常时执行else分支
    10     print('else')

    (6)finally分支

     1 def func():
     2     f = open('file')
     3     try:
     4         while True:
     5             for line in f:
     6                 if line.startswith('a'):
     7                     return line
     8     except:
     9         print('有异常')
    10     finally:  # 即使return,也会先执行finally中的语句,再执行return
    11         f.close()  # 即使报错,也会先执行finally中的语句
    12 # finally用于回收一些操作系统的资源:数据库连接,打开的文件句柄,网络连接

    (7)主动抛出异常

    raise ValueError('你输入有误')

    (8)断言-语法

    1 assert 1==2  # 只能接受一个布尔值

    相当于if语句

    1 if 1 == int(input()):
    2     pass
    3 else:
    4     raise AssertionError
  • 相关阅读:
    javascript对象——基本对象
    javaScript对象——function对象
    javaScript入门
    前端页面性能指标与采集方式
    前端页面统计beacon调研
    数据管理工具Flux、Redux、Vuex的区别
    Vue Router的懒加载路径
    webpack4:连奏中的进化
    前端自动化测试漫长路之——Selenium初探
    webpack中tree-shaking技术介绍
  • 原文地址:https://www.cnblogs.com/Studying-Du/p/12459340.html
Copyright © 2020-2023  润新知