VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • Python异常

目标:

  • 异常的概念
  • 捕获异常
  • 异常传递
  • 自定义异常

1.异常的概念

  • 在程序运行时,如果Python解释器遇到一个错误,会停止程序的执行,并提示一些错误信息,这就是异常
  • 程序停止执行并且提示错误信息 这个动作,我们通常称之为异常
  • 程序在开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的稳定性和健壮性

2.捕获异常

2.1简单的捕获异常的语法

  • 在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来捕获异常
  • 捕获异常最简单的语法格式:
  • try:
        尝试执行的代码
    except:
        出现错误的处理
  •  try 尝试,下方编写要尝试的代码,不确定是否能够正常执行的代码
  • except 如果不是,下方编写尝试失败的代码

  简单异常捕获演练——要求用户输入整数

  •  View Code

2.2错误类型捕获

  • 在程序执行时,可能会遇到不同类型的异常,并且 需要针对不同类型的异常,做出不同的相应,这个时候就需要捕获错误类型了。
  • 语法如下:
    • 复制代码
      try:
          #尝试执行的代码
          pass
      except 错误类型1:
          #针对错误类型1,对应的处理代码
          pass
      except 错误类型2:
          #针对错误类型2,对应的处理代码
          pass
      except Exception as result:
          print("未知错误%s" % result)
      复制代码
  • 当Python解释器抛出异常时,最后一行错误信息的第一个单词,就是错误类型
  • 异常演练:
    • 需求:
      1. 提示用户输入一个整数
      2. 使用8除以用户输入的整数并输出
    •  View Code
  • 捕获未知错误
    • 在开发时,要预判到所有可能出现的错误,还是有一定难度的
    • 如果希望程序,无论出现任何错误,都不会因为Python解释器抛出异常为终止,可以在增加一个except  Exception as result
      • 演示:假如没有考虑到除以0这种情况
      •  View Code

2.3异常捕获完整语法

  • 在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:
    • 复制代码
      try:
          #尝试执行的代码
          pass
      except 错误类型1:
          #针对错误类型1,对应的处理代码
          pass
      except 错误类型2:
          #针对错误类型2,对应的处理代码
          pass
      except (错误类型3,错误类型4):
          #针对 错误类型3 和 错误类型4 对应的处理代码
          pass
      except Exception as result:
          print("未知错误%s" % result)
      else:
          #没有异常才会执行的代码
          pass
      finally:
          #无论是否有异常,都会执行的代码
          print("无论是否有异常,都会执行的代码")
      复制代码
    • else 只有在没有异常时,才会执行的代码

    • finally 无论是否有异常,都会执行的代码 

3.异常的传递

  • 异常的传递——当函数/方法执行出现异常,会将异常传递给 函数/方法的 调用一方
  • 如果 传递到主程序 任然 没有异常处理,程序才会被终止
    • 复制代码
       1 #异常的传递性
       2 def fun1():
       3     return int(input("请输入一个整数"))
       4 
       5 def fun2():
       6     fun1()
       7 
       8 fun2()
       9 
      10 """
      11 请输入一个整数a
      12 Traceback (most recent call last):
      13   File "D:\python_DM\venv\jiaoxue\异常\异常.py", line 8, in <module>
      14     fun2()
      15   File "D:\python_DM\venv\jiaoxue\异常\异常.py", line 6, in fun2
      16     fun1()
      17   File "D:\python_DM\venv\jiaoxue\异常\异常.py", line 3, in fun1
      18     return int(input("请输入一个整数"))
      19 ValueError: invalid literal for int() with base 10: 'a'
      20  传递顺序:3 - > 6 --> 8
      21 
      22 """
      复制代码
  • 提示:
    • 在开发中,可以在主函数中增加 异常捕获
    • 而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获 中
    • 这样就不需要在代码中增加大量的 异常捕获,能够保证代码的整洁
    • 代码演示:
      • 复制代码
        def fun1():
            return int(input("请输入一个整数"))
        
        def fun2():
            fun1()
        
        try:
            fun2()
        except Exception as result:
            print("未知错误%s"%result)
        
        """
        运行结果:
        请输入一个整数a
        未知错误invalid literal for int() with base 10: 'a'
        """
        复制代码

         

 

4.抛出raise异常

4.1应用场景

  • 在开发中,除了 代码执行错误 Python 解释器 抛出异常之外
  • 还可以根据 应用程序 特有的业务需求 主动抛出异常

  示例:

  • 提示用户 输入密码,如果 长度少于8,抛出异常

4.2抛出异常

  • Python中提供一个Exception异常类
  • 在开发时,如果满足特定业务需求时,希望 抛出异常,可以:
    1. 创建 Exception 的对象
    2. 使用 raise 关键字 抛出异常
  • 需求:

    • 定义一个input_password函数,提示用户输入密码
    • 如果用户输入的密码长度<8,主动抛出异常
    • 如果用户输入的密码长度>=8,返回密码
  •  

    复制代码
     1 #抛出异常
     2 def input_password():
     3     #提示用户输入密码
     4     pwd = input("请输入密码")
     5     #判断密码长度是否>=8,如果大于返回用户输入的密码
     6     if len(pwd) >= 8:
     7         return pwd
     8     #如果<8 主动抛出异常
     9     #创建异常对象,可以使用错误信息字符串作为参数
    10     ec = Exception("密码长度不够")
    11     #主动抛出异常
    12     raise ec
    13 
    14 try:
    15     print(input_password())
    16 except Exception as result:
    17     print(result)
    18 
    19 """
    20 运行结果1:
    21 请输入密码123456
    22 密码长度不够
    23 
    24 运行结果2:
    25 请输入密码123456798
    26 123456798
    27 """
    复制代码
来源:https://www.cnblogs.com/fjfsu/p/15468013.html

相关教程