Python异常

J.FengS 2021-10-27 22:58:20
Python 异常 博客园

目标:

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

1.异常的概念

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

2.捕获异常

2.1简单的捕获异常的语法

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

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

  •  1 #简单的捕获异常
     2 try:
     3 a = int(input("请输入一个整数"))
     4 except:
     5 print("请输入一个正确的整数")
     6 print("*"*30)
     7 """
     8 运行结果:
     9 请输入一个整数5
    10 ******************************
    11
    12 请输入一个整数abc
    13 请输入一个正确的整数
    14 ******************************
    15
    16 """
    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除以用户输入的整数并输出
    • 1 try:
      2 num = int(input("请输入一个整数,且不能为0:"))
      3 a = 8 / num
      4 print(a)
      5 except ValueError:
      6 print("请输入正确的整数")
      7 except ZeroDivisionError:
      8 print("不能输入0")
      View Code
  • 捕获未知错误
    • 在开发时,要预判到所有可能出现的错误,还是有一定难度的
    • 如果希望程序,无论出现任何错误,都不会因为Python解释器抛出异常为终止,可以在增加一个except  Exception as result
      • 演示:假如没有考虑到除以0这种情况
      •  1 try:
         2 num = int(input("请输入一个整数,且不能为0:"))
         3 a = 8 / num
         4 print(a)
         5 except ValueError:
         6 print("请输入正确的整数")
         7 except Exception as result:
         8 print("未知错误%s" % result)
         9 """
        10 运行结果:
        11 请输入一个整数,且不能为0:0
        12 未知错误division by zero
        13 """
        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 """
    抛出异常
版权声明
本文为[J.FengS]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/fjfsu/p/15468013.html

  1. python的site-packages复制直接到其他电脑环境上能用吗
  2. Pycharm如何给项目配置python解释器
  3. conda创建python虚拟环境
  4. Python selenium的爬虫无法完整爬取整个页面的内容
  5. 高清版!这18张 Python 数据科学速查表,让你的代码变得更强大!
  6. python代码不会敲,请好心老哥帮助我一下
  7. Python敲七输出符合的个数
  8. Python 有人能给提供简单的思路嘛
  9. python单次运行写入csv成功,循环写入失败
  10. python利用os模块进行增量备份
  11. 【算法学习】807. 保持城市天际线(java / c / c++ / python / go / rust)
  12. 如何利用python输出等腰杨辉三角
  13. python按键执行倒计时小程序不能实现要求,要怎么改才好?
  14. Python request模块post请求的问题
  15. Django连接已有Oracle时的主键设置问题,没主键无法查询怎么办?
  16. 如何用python的dictionary编写一个联系人通讯录程序
  17. 如果Python里range反向输出,不输出步长会怎么样?
  18. 一个关于Python pip的问题: 出现Cannot open \python\Scripts\pip-script.py报错
  19. 富婆闺蜜非让我用Python给她写个淘宝双十一抢购脚本,那只能安排了
  20. 【全网最全】python正则表达式大全,所有讲解都在这,包教包会,学不会找我!
  21. AI python课和 python课都是198 这两个课是同一个课程内容吗?有什么区别和相似点?
  22. python的__new__()疑问
  23. Python代码阅读(第24篇):根据筛选函数将列表元素分成两组
  24. python怎么实现动态障碍物按固定路径行走
  25. Python代码阅读(第24篇):根据筛选函数将列表元素分成两组
  26. Python题目,希望帮我解答一下辛苦
  27. python +selenium 如何获取下拉列表,默认选中值
  28. 有个pb文件做好的模型,对此模型的操作想用python封装成api,怎么做?
  29. 请问,mac的Pycharm中新建项目时候的Base interpreter选项里有两个Python3.8,该选哪个?
  30. python如何读取指定文件名的excel并分别汇总
  31. 如何写利用python将fastq文件转换成fasta文件的脚本
  32. python小工具
  33. 新猿0基础python教程 如何写好接口文档
  34. 请问我哪里错了呀,数值计算,python运算符号出错,但是我看不出来
  35. Python游戏开发,Pygame模块,Python从零开始带大家实现一个魔塔小游戏(2)
  36. Python爬虫实战,requests模块,Python实现抓取王者荣耀全套皮肤
  37. Python游戏开发,Pygame模块,Python从零开始带大家实现一个魔塔小游戏(3)
  38. 大神们这个问题用python怎么解决啊
  39. 简单理解python装饰器
  40. 货物托运收费问题用python 求解 一直输出错误
  41. 使用 Python 实现的卷积神经网络初学者指南
  42. 为什么Python中调用模块传递列表报错,而直接模块内调用列表就不会报错。
  43. 可视化 Python 打包 exe,这个神器绝了!
  44. 如此高效!数据科学中这4款 Python 神器真的很棒!
  45. 用 Python 开发交互式 Web 应用,So Easy
  46. Python多分类问题pr曲线绘制(含代码)
  47. 80 行 Python 代码搞定全国区划代码
  48. 有包含一阶贝塞尔函数的Python库吗
  49. Python输出乘法口诀表中的2d是什么意思
  50. Python 爬虫goole图片 使用selenium+chromedriver 出错DevToolsActivePort file doesn't exist
  51. python怎么做,我不会做,别走,留下代码!
  52. (数据科学学习手札129)geopandas 0.10版本重要新特性一览
  53. MySQL备份之xtrabackup(Python)
  54. (数据科学学习手札129)geopandas 0.10版本重要新特性一览
  55. Python:枚举列表中所有元素的可能组合
  56. 编写python 程序 人的心跳频率与温度的关系 计算人的累记心跳次数
  57. python相关,请问这张图里代码c for c in coinValueList if c&lt;=change是什么意思
  58. Python中的分段函数问题求解
  59. Python中的递归求年龄问题
  60. python如何求出多个股票的移动均价