目标

异常的概念

捕获异常

异常的传递

抛出异常

01. 异常的概念

程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常

程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常

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

02. 捕获异常

2.1 简单的捕获异常语法

在程序开发中,如果 对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来 捕获异常

捕获异常最简单的语法格式:

try: 尝试执行的代码except: 出现错误的处理

try 尝试,下方编写要尝试代码,不确定是否能够正常执行的代码

except 如果不是,下方编写尝试失败的代码

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

try: # 提示用户输入一个数字 num = int(input("请输入数字:"))except: print("请输入正确的数字")

2.2 错误类型捕获

在程序执行时,可能会遇到 不同类型的异常,并且需要 针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了

语法如下:

try: # 尝试执行的代码 passexcept 错误类型1: # 针对错误类型1,对应的代码处理 passexcept (错误类型2, 错误类型3): # 针对错误类型2 和 3,对应的代码处理 passexcept Exception as result: print("未知错误 %s" % result)

当 Python 解释器 抛出异常 时,最后一行错误信息的第一个单词,就是错误类型

异常类型捕获演练 —— 要求用户输入整数

需求

提示用户输入一个整数

使用 8 除以用户输入的整数并且输出

try: num = int(input("请输入整数:")) result = 8 / num print(result)except ValueError: print("请输入正确的整数")except ZeroDivisionError: print("除 0 错误")

捕获未知错误

在开发时,要预判到所有可能出现的错误,还是有一定难度的

如果希望程序 无论出现任何错误,都不会因为 Python 解释器 抛出异常而被终止,可以再增加一个 except

语法如下:

except Exception as result: print("未知错误 %s" % result)

2.3 异常捕获完整语法

在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:

提示:

有关完整语法的应用场景,在后续学习中,结合实际的案例会更好理解

现在先对这个语法结构有个印象即可

try: # 尝试执行的代码 passexcept 错误类型1: # 针对错误类型1,对应的代码处理 passexcept 错误类型2: # 针对错误类型2,对应的代码处理 passexcept (错误类型3, 错误类型4): # 针对错误类型3 和 4,对应的代码处理 passexcept Exception as result: # 打印错误信息 print(result)else: # 没有异常才会执行的代码 passfinally: # 无论是否有异常,都会执行的代码 print("无论是否有异常,都会执行的代码")

else 只有在没有异常时才会执行的代码

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

之前一个演练的 完整捕获异常 的代码如下:

try: num = int(input("请输入整数:")) result = 8 / num print(result)except ValueError: print("请输入正确的整数")except ZeroDivisionError: print("除 0 错误")except Exception as result: print("未知错误 %s" % result)else: print("正常执行")finally: print("执行完成,但是不保证正确")

03. 异常的传递

异常的传递 —— 当 函数/方法 执行 出现异常,会 将异常传递 给 函数/方法 的 调用一方

如果 传递到主程序,仍然 没有异常处理,程序才会被终止

提示

在开发中,可以在主函数中增加 异常捕获

而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获 中

这样就不需要在代码中,增加大量的 异常捕获,能够保证代码的整洁

需求

定义函数 demo1() 提示用户输入一个整数并且返回

定义函数 demo2() 调用 demo1()

在主程序中调用 demo2()

def demo1(): return int(input("请输入一个整数:"))def demo2(): return demo1()try: print(demo2())except ValueError: print("请输入正确的整数")except Exception as result: print("未知错误 %s" % result)

04. 抛出 raise 异常

4.1 应用场景

在开发中,除了 代码执行出错 Python 解释器会 抛出 异常之外

还可以根据 应用程序 特有的业务需求 主动抛出异常

示例

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

注意

当前函数 只负责 提示用户输入密码,如果 密码长度不正确,需要其他的函数进行额外处理

因此可以 抛出异常,由其他需要处理的函数 捕获异常

4.2 抛出异常

Python 中提供了一个 Exception 异常类

在开发时,如果满足 特定业务需求时,希望 抛出异常,可以:

创建 一个 Exception 的 对象

使用 raise 关键字 抛出 异常对象

需求

定义 input_password 函数,提示用户输入密码

如果用户输入长度 < 8,抛出异常

如果用户输入长度 >=8,返回输入的密码

def input_password(): # 1. 提示用户输入密码 pwd = input("请输入密码:") # 2. 判断密码长度,如果长度 >= 8,返回用户输入的密码 if len(pwd) >= 8: return pwd # 3. 密码长度不够,需要抛出异常 # 1> 创建异常对象 - 使用异常的错误信息字符串作为参数 ex = Exception("密码长度不够") # 2> 抛出异常对象 raise extry: user_pwd = input_password() print(user_pwd)except Exception as result: print("发现错误:%s" % result)

python 抛出异常_python 异常相关推荐

  1. python抛出异常及异常传递

    抛出异常: Python程序中的异常不仅可以自动触发,还可以由开发人员使用raise语句和assert语句主动抛出. 使用raise语句抛出异常: 1.使用异常类引发异常 格式如下: raise 异常 ...

  2. python机制_python异常机制个人理解(参考网上资料)

    当你的程序中出现异常情况时就需要异常处理.比如当你打开一个不存在的文件时.当你的程序中有一些无效的语句时,Python会提示你有错误存在. 下面是一个拼写错误的例子,print写成了Print.Pyt ...

  3. python中用来抛出异常的关键字是( )_python异常抛出

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 主动抛出异常raise typeerror(类型错误) # 7. 触发异常try ...

  4. python自动退出程序_python异常退出

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 异常是一个事件,该事件会在程序执行过程中发生,将影响程序的正常执行. 一般情况下 ...

  5. python中使用什么来实现异常捕捉_python 异常捕捉

    python中捕捉异常常用句式try...except. try 语句按照如下方式工作: 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句). 如果没有异常发生,忽略 e ...

  6. python中异常语句_python 异常

    导航: python的异常分为两种,1).语法错误,在python解释器的语法检测中不通过不能运行代码    2).异常,python程序运行期检测到的错误被称为异常.在没有做异常处理时,将终止程序并 ...

  7. python打印异常_python异常输出

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 开发准备cas 的 python sdk 包含了用于访问和操作 cas 的所有 ...

  8. python sql语句异常捕获_python异常处理

    一.什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常. 异常是Python对象,表示一个错误. 当Py ...

  9. python错误-新手常见Python错误及异常解决处理方案

    写Python代码的小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中的错误和异常. 先抛出两个问题: 什么是Python错误和异常? 如何处理Python错误和 ...

最新文章

  1. [改善Java代码]避开基本类型数组转换列表陷阱
  2. c语言有重复元素全排列,【求助】全排列 不重复 由小到大 输出 代码
  3. SD-WAN — 云专线(企业入云)
  4. javaScript不是java脚本
  5. poj 3348(求凸包面积)
  6. 简单的实现微信获取openid
  7. leetcode 419. Battleships in a Board | 419. 甲板上的战舰(二维矩阵DFS经典“感染”思路)
  8. LeetCode 1500. Design a File Sharing System(哈希map+优先队列)
  9. Android 窗口Dialog 代码以及使用
  10. 抽象工厂模式_设计模式3之抽象工厂模式
  11. python 进度条模块....
  12. 如何识别媒体偏见_面部识别软件:宝贵资产,还是社会偏见的体现?
  13. Java多线程笔记(刘意day23、24)
  14. 在win10系统中批量修改文件名称
  15. app软件怎么申请软件著作权?
  16. Swift 进阶 | 看得见的算法
  17. wifi的几种加密方式
  18. #1992. 购票(ticket)
  19. 基因组注释1. 重复序列repeatmasker, trf
  20. 笃行致远,人大金仓荣获“2021年度卓越表现数据库”

热门文章

  1. php字符传截取,php怎么实现字符串截取?
  2. Linux正则和grep命令
  3. redis、kafka、rabittMQ对比
  4. PHP 如何在Redis中实现事物(事物提交和事物回滚)
  5. mysql 保留两位小数
  6. MySQL加索引语句不加锁:ALGORITHM=INPLACE, LOCK=NONE
  7. jQuery Vue的CDN
  8. Wechat公众号授权登录接口
  9. yum安装php5.6 nginx,CentOS 7 yum安装 Nginx1.16 + MySQL5.5 PHP5.6
  10. java 获取当前目录_java获得当前文件路径