zoukankan      html  css  js  c++  java
  • python 异常处理

    异常处理

    错误与异常

    • 错误:程序运行前的语法问题,如:关键字、缩进、括号不成对等

    • 异常:在程序运行过程中出现的错误,如:变量未定义、除数为0、属性不存在等

    异常处理

    • 说明:异常处理可以认为是一种特殊的流程控制语句,可以提高代码的健壮性。

    • 语法:try-except

      try:
         print('正常执行')
         # print(a)
         print(3/0)
      except Exception as e:
         # Exception是所有异常的基类,因此此处可以捕获所有异常
         print('出现异常,进行处理')
         print(e)

      print('其他代码')
    • 捕获多个异常:

      try:
         # print(a)
         # print(3/0)
         fp = open('123.txt')
      except NameError as e:
         print('NameError:', e)
      except ZeroDivisionError as e:
         print('ZeroDivisionError:', e)
      except Exception as e:
         print('other:', e)

      也可以对多种异常进行分组处理:


      try:
         # print(a)
         # print(3/0)
         fp = open('123.txt')
      except (NameError, ZeroDivisionError) as e:
         # 将特定的某些异常统一处理,写到元组中即可
         print(e)
      except:
         print('其他异常')
    • else和finally


      try:
         print('正常执行')
         print(a)
      except:
         print('出现异常')
      else:
         # 出现异常就不执行了
         print('正常结束')
      finally:
         # 无论有误异常都会执行
         print('无论如何都执行')

      else:在没有异常的时候回执行,出现异常就不执行了

      finally:无论是否有异常,都会执行

    • 抛出异常:raise


      try:
         print('开始')
         # 根据代码逻辑的需要,手动抛出特定的异常
         raise Exception('手动抛出异常')
         print('一切正常')
      except Exception as e:
         print('出现异常:', e)

      print('结束')
    • 异常嵌套:try-except结构中嵌套try-except结构


      print('我要去上班,什么事情都不能阻止我上班的脚步')
      try:
         print('我准备骑电动车')
         raise Exception('昨天晚上那个缺德的家伙把我充电器给拔了,无法骑车')
         print('骑电动车提前到达公司')
      except Exception as e:
         print(e)
         try:
             print('我准备坐公交')
             raise Exception('等了20分钟一直没有公交车,果断放弃')
             print('坐公交准时到达公司')
         except Exception as e:
             print(e)
             print('我准备打车')
             print('打车还是快,一会就到公司了')

      print('热情满满的开始一天的工作')
    • 自定义异常类:继承自异常的基类(Exception)


      # 自定义异常类,名字通常以Exception结尾
      class MyException(Exception):
         def __init__(self, msg):
             self.msg = msg

         def __str__(self):
             # repr键变量转换成字符串,若本身是字符串则不必要
             # return repr(self.msg)
             return self.msg

         def deal(self):
             print('异常已处理')

      try:
         print('正常执行')
         raise MyException('手动抛出定义异常')
      except MyException as e:
         print(e)
         e.deal()
    • 特殊使用

      • 场景:做文件操作时,中间无论读写,也无论有误异常,最终一定要把文件关闭

      • with:使用with,不必再关系文件的关闭问题,with语句块结束后一定会确保文件关闭


      # fp = open('test.txt', 'rb')
      # # 各种读写操作
      # fp.close()

      # 使用with,无需关心文件的关闭问题
      with open('test.txt', 'rb') as fp:
         content = fp.read(5)
         print(content)

  • 相关阅读:
    fzu 2138
    hdu 1598 暴力+并查集
    poj 1734 floyd求最小环,可得到环上的每个点
    floyd求最小环 模板
    fzu 2087并查集的运用求最小生成树的等效边
    hdu 2586 lca在线算法(朴素算法)
    CF 602 D. Lipshitz Sequence 数学 + 单调栈 + 优化
    Problem 2238 Daxia & Wzc's problem 1627 瞬间移动
    D. Tavas and Malekas DFS模拟 + kmp + hash || kmp + hash
    K-th Number 线段树的区间第K大
  • 原文地址:https://www.cnblogs.com/kiki5881/p/8588230.html
Copyright © 2011-2022 走看看