zoukankan      html  css  js  c++  java
  • Python学习之==>异常处理

    一、为什么要进行异常处理

      程序在运行过程中,可能会遇到各种各样的错误,程序一旦出错,就会停止运行。为了让程序能够正常运行完,就需要捕捉异常,通过对捕捉到的异常做对应的处理,来保证程序正常运行。

    二、捕捉所有异常

      1、try:捕捉这段代码的异常

      2、except Exception:捕捉所有异常

      3、else:没有出错则执行else下面的代码,但else不写也可以

      4、finally:无论是否有异常,都会执行finally下面的代码,它也可以不写

     1 # 异常处理
     2 first = input('first:')
     3 second = input('second:')
     4 try:  # 捕捉异常
     5     first = int(first)
     6     second = int(second)
     7     res = first/second
     8 except Exception as e: # try里面这段代码出异常的时候走
     9     print(e)
    10     print('出错了')
    11 else:  # 没有出错,不是必须写的
    12     print('没有出错') # 没有出错的时候走
    13     print(res)
    14 finally:  # 不管是否出错都会执行它,也不是必须写的
    15     print('无论是否出错都会执行这条代码!')

    三、捕捉异常练习:完善MySQL操作函数

     1 def my_db(sql):
     2     import pymysql
     3     try:
     4         conn = pymysql.connect(**MYSQL_INFO)
     5     except Exception as e:
     6         print('数据库连接失败')
     7         return '数据库连接失败'  # 遇到return函数结束
     8     else:  # 没有出错继续执行
     9         cur = conn.cursor()
    10         try:
    11             cur.execute(sql)
    12         except Exception as res:
    13             print('执行sql出错,sql是:%s'%sql)
    14         else:  # 没有出错继续执行
    15             if sql.strip().split()[0].upper() == 'SELECT':
    16                 res = cur.fetchall()
    17             else:
    18                 conn.commit()
    19                 res = 'OK'
    20         finally:  # 这个finally对应的是执行sql出错的try,前面连接失败直接跳出了函数
    21             cur.close()
    22             conn.close()
    23         return res

    四、常见的异常

     1 AttributeError: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
     2 IOError:输入 / 输出异常,一般是无法打开文件
     3 ImportError: 无法导入模块或包,一般是路径问题或名称错误
     4 IndentationError:代码没有正确对齐,属于语法错误
     5 IndexError:下标索引超出序列边界,比如x只有三个元素,却试图访问x[3]
     6 KeyError:试图访问字典里不存在的键
     7 KeyboardInterrupt:Ctrl + C被按下
     8 NameError:使用一个还未被赋予对象的变量
     9 SyntaxError: 语法错误
    10 TypeError: 传入对象类型与要求的不符
    11 UnboundLocalError:试图访问一个还未被设置的局部变量,一般是由于在代码块外部还有另一个同名变量
    12 ValueError: 传入一个调用者不期望的值,即使值的类型是正确的 

    五、主动抛出异常

      在代码里让它自动抛出一个异常,然后捕捉到。比如我们在写自动化测试脚本时,结果和预期不符,就可以主动抛出一个异常,然后捕捉到做其他处理。主动抛出异常使用raise关键字。

    1 try:
    2     raise KeyError  # 主动抛出一个keyerror的异常
    3 except KeyError as e:
    4     print('这是主动抛出的异常')
  • 相关阅读:
    【Oracle】ORA-00257:archiver error. Connect internal only, until freed 错误的处理方法
    【SQL】区分新来顾客和再访顾客
    【Xcelsius】在PPT中嵌入水晶易表Xcelsius2008仪表盘
    【SAP BO】【WEBI】【转】Webi实现动态选择度量
    【转】Xcelsius2008 水晶易表问题 部分汇总
    如何进行有效的需求调研
    实现数据仓库的七个步骤、七个禁忌、七种思路
    UTC日期转时间戳
    WIN10下命令行禁用编辑模式
    让socket端口不被子进程继承
  • 原文地址:https://www.cnblogs.com/L-Test/p/9233105.html
Copyright © 2011-2022 走看看