文章目录

  • 一、异常的概念和作用
  • 二、异常的写法
    • 2.1 语法
    • 2.2 示例
    • 2.3 捕获指定异常
      • 2.3.1 语法
      • 2.3.2 示例
      • 2.3.3 捕获多个指定异常
      • 2.3.4 捕获异常描述信息
      • 2.3.5 捕获所有异常—Exception(重点)
    • 2.4 异常的else
    • 2.5 异常的finally
  • 三、异常的传递
  • 四、自定义异常(抛出 `raise` 异常)
    • 1)抛出异常
    • 2)应用场景
  • 五、总结

一、异常的概念和作用

  • 程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常
  • 程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常
  • 异常的作用:有一句代码可能或者不可能发生错误,那么我们就把这句代码放到异常当中书写。因为我们的异常可以尝试执行可能发生错误的代码。万一这句代码发生错误,我们将不再执行这句错误的代码。而去执行其他的代码。这样可以避免程序发生错误而导致程序无法推进。

序开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的 稳定性和健壮性

例如:以r方式打开一个不存在的文件。

open('test.txt', 'r')

FileNotFoundError(异常类型): [ Errno 2] No such file or directory: ’ test. txt’(异常信息)

二、异常的写法

2.1 语法

try:可能发生错误的代码
except:如果出现异常执行的代码

2.2 示例

需求:尝试以r模式打开文件,如果文件不存在,则以w方式打开。

try:f = open('test.txt', 'r')
except:f = open('test.txt', 'w')   # w方式,如果文件不存在则新建文件

2.3 捕获指定异常

2.3.1 语法

try:可能发生错误的代码
except 异常类型:如果捕获到该异常类型执行的代码
  • Python 解释器 抛出异常 时,最后一行错误信息的第一个单词,就是错误类型

2.3.2 示例

try:print(num)
except NameError:print('有错误')

注意:

  1. 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常(不去执行except下方的代码)。
  2. 一般try下方只放一行尝试执行的代码。

2.3.3 捕获多个指定异常

当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。

try:print(1/0)except (NameError, ZeroDivisionError):print('有错误')

2.3.4 捕获异常描述信息

try:print(num)
except (NameError, ZeroDivisionError) as result:print(result)

2.3.5 捕获所有异常—Exception(重点)

Exception是所有程序异常类的父类。

try:print(num)
except Exception as result:print(result)

2.4 异常的else

else表示的是如果没有异常要执行的代码。

try:print(1)
except Exception as result:print(result)
else:print('我是else,是没有异常的时候执行的代码')

1
我是else,是没有异常的时候执行的代码

2.5 异常的finally

finally表示的是无论是否异常都要执行的代码,例如关闭文件。

try:f = open('test.txt', 'r')
except Exception as result:f = open('test.txt', 'w')
else:print('没有异常,真开心')
finally:f.close()

三、异常的传递

  • 异常的传递 —— 当 函数/方法 执行 出现异常,会 将异常传递 给 函数/方法 的 调用一方
  • 如果 传递到主程序,仍然 没有异常处理,程序才会被终止。

提示

  • 在开发中,可以在主函数中增加 异常捕获
  • 而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获
  • 这样就不需要在代码中,增加大量的 异常捕获,能够保证代码的整洁。

需求:

​ 1. 尝试只读方式打开test.txt文件,如果文件存在则读取文件内容,文件不存在则提示用户即可。

​ 2. 读取内容要求:尝试循环读取内容,读取过程中如果检测到用户意外终止程序,则except捕获异常并提示用户。

import time
try:f = open('test.txt')try:while True:content = f.readline()# 如果读取完成退出循环if len(content) == 0:breaktime.sleep(2)print(content)except:# 如果在读取文件的过程中,产生了异常,那么就会捕获到# 比如在命令提示符中 按下了 ctrl+cprint('意外终止了读取数据')finally:f.close()print('关闭文件')
except:print("没有这个文件")

四、自定义异常(抛出 raise 异常)

1)抛出异常

在Python中,抛出自定义异常的语法为raise 异常类对象

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

2)应用场景

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

需求:密码长度不足,则报异常(用户输入密码,如果输入的长度不足3位,则报错,即抛出自定义异常,并捕获该异常)。

# 自定义异常类,继承Exception
class ShortInputError(Exception):def __init__(self, length, min_len):# 用户输入密码长度self.length = length# 系统要求的最小长度self.min_len = min_len# 设置抛出异常的描述信息def __str__(self):return f'你输入的长度是{self.length}, 不能少于{self.min_len}个字符'def main():try:con = input('请输入密码:')if len(con) < 3:raise ShortInputError(len(con), 3)except Exception as result:print(result)else:print('密码已经输入完成')main()

五、总结

  • 异常语法
try:可能发生异常的代码
except:如果出现异常执行的代码
else:没有异常执行的代码
finally:无论是否异常都要执行的代码
  • 捕获异常
except 异常类型:代码except 异常类型 as xx:代码
  • 自定义异常
# 1. 自定义异常类
class 异常类类名(Exception):代码# 设置抛出异常的描述信息def __str__(self):return ...# 2. 抛出异常
raise 异常类名()# 捕获异常
except Exception...

22_python基础—异常相关推荐

  1. Java基础-异常(Exception)处理

    Java基础-异常(Exception)处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.异常的概述 什么是异常?Java代码在运行时期发生的问题就是异常.在Java中,把异 ...

  2. Java16-java语法基础——异常

    Java16-java语法基础--异常 一.异常概念 1.异常:应用程序在运行过程中出现的错误或非正常的意外情况,即虚拟机的通常操作中可能遇到的异常,是一种常见的运行错误. 2.原因:数组越界.空指针 ...

  3. Java基础-异常-throws Exception-抛声明

    Java基础-异常-throws Exception-抛声明 参考文章: (1)Java基础-异常-throws Exception-抛声明 (2)https://www.cnblogs.com/pl ...

  4. java todo error_java基础-异常

    女神镇楼 1.概述 异常是一个在程序执行期间发生的事件,他中断了正在执行的程序的正常指令流.如空指针.数组溢出等.在java中,异常也作为类的实例的形式出现.当某一个方法中发生错误时,这个方法会创建一 ...

  5. Java基础—异常分类及处理

    目录 一.概念 三.异常的处理方式 四.throw 和 throws 的区别: 一.概念 如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法.在这种情况下会抛出一个封装了错误信息的对 ...

  6. Java基础 — 异常

    异常对象都是派生于Throwable 类的一个实例. 异常层次结构简化示意图: 所有的异常都是由Throwable 继承而来,但在下一层立即分解为两个分支:Error 和 Exception Erro ...

  7. Java基础 —— 异常

    目录 异常的概念及分类 异常的处理try-catch-finally 异常抛出throw(s) 自定义异常 异常的概念及分类 什么是异常 异常是指在程序的运行过程中发生的一些不正常事件.比如:除0溢出 ...

  8. [Java基础]异常概述与异常处理

    异常:

  9. Java基础---异常---turow和throws

    异常 1.Throwable:可抛出的,是异常的顶层父类,其他的异常或者错误都是Throwable的子类类型,只有是Throwable的体系类型,才可以使用异常的处理机制 2.Error:错误,是Th ...

最新文章

  1. Permutation Sequence
  2. PostgreSQL 业务数据质量 实时监控 实践
  3. 三亚之旅 海景--美得让你尖叫
  4. python程序员脱单攻略_作为一只程序员,如何脱单?
  5. 消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型
  6. 聚类dbi指数_一种基于DBI-PD聚类算法的异常检测机制
  7. relativelayout中按键不能点_CNC | M80/M800系列系统常见按键和外部存储器故障
  8. 如何在C++中嵌入JAVA程序
  9. android app 提高级别,android 关于提高第三方app的service优先级
  10. 下一代Mac mini将率先搭载苹果自研M2系列芯片
  11. hprof文件分析工具_应用稳定性优化系列(三),资源泄露问题分析及定位
  12. MyBatis mapper parameterType
  13. C#仿win10计算器
  14. 组态王中Modbus字节顺序的调整
  15. Hive新特性reflect函数介绍
  16. 《天长地久》写照真实生活为何被影迷埋没不被欣赏
  17. 记录一下近期自己的顿悟
  18. AUTOSAR LIN Introduction
  19. 小程序有哪些低成本获客手段——案例解析
  20. 修改文件md5值的简单方法!

热门文章

  1. 北大OJ(POJ 2503)在线翻译
  2. java中的关键事件是_java – 自定义关键事件
  3. 数据3分钟丨华为正式捐赠欧拉操作系统;腾讯云数据库TDSQL将发布免费版;MatrixDB 4.3发布...
  4. 直播丨2020年全国首场12c OCM直考揭秘
  5. 这样做,RMAN备份速度可提高6倍!
  6. 从中心到边缘,IoT正变为互联网之上的一张大网
  7. 【华为云技术分享】华为开发者大会HDC.Cloud带你探索强化学习三大挑战及落地实践
  8. 自动搭建openEuler虚拟机QEMU运行环境
  9. 【奇技淫巧】Android真机调试看不到应用logcat或者应用logcat信息太少的解决方法
  10. cmdb python 采集虚拟机_Python编程(三十四):CMDB后台管理、封装自定义JS组件、前端td标签定制显示内容及属性...