韩顺平 | 零基础快速学Python(15) 错误和异常

概述

Python有两种不同的错误:语法错误和异常。
语法错误SyntaxError/句法错误/解析错误:执行前编译器检测到的错误。语法错误也是一种异常,SyntaxError继承Exception。
异常Exception:执行时检测到的错误。

需求:出异常会直接导致程序崩溃/结束,需要一种机制可以对异常进行处理,让程序出现异常时可以继续执行,引出异常和异常处理机制。

解决方案:捕获异常,保证程序可以继续执行。

try:num1 = 10num2 = 0res = num1 / num2
except Exception as e:print(f"捕获异常{e}")
print("程序继续执行")

内置异常

异常层级关系

基类异常:BaseExceptionException
具体异常

常见异常

IndexError:索引越界
KeyError:现有键集合中找不到指定的隐射(字典)键时被引发
NameError:当某个局部或全局名称未找到时将被引发,如使用没有定义的变量名
TypeError:当一个操作或函数使用了类型不适当的对象时被引发
ValueError:当操作或函数接收到具有正确类型但值不适合参数时被引发

print(int("123"))
print(int("hello")) # ValueError

ZeroDivisionError:当除法或取余运算的第二个参数为零时将被引发
FileNotFoundError:请求的文件或目录不存在
AttributeError:属性引用或赋值失败

class A:def hi(self):pass
a = A()
print(a.name)

异常处理

捕获异常

try:可能出现异常的代码
except [异常 as 别名]: # 将捕获的异常类型用别名接收发生异常时,对异常处理的代码 # 程序员可以通过别名获取异常的具体信息
[else:]没有发生异常时,执行的代码
[finally:] # 如关闭连接、释放资源相关代码不管有没有异常,都要执行的代码

可以有多个except语句,捕获不同的异常(进行不同的业务处理),如果发生异常,只会匹配一个except,建议把具体的异常写在前面,基类异常在后,当具体异常匹配不到时,会由基类异常进行匹配。一个except子句,也可以捕获不同的异常。

except (IndexError, ZeroDivisionError) as e:print(f"出现了异常信息{e} 类型{type(e)}")
except Exception as e:print(f"出现了异常Exception 异常信息->{e}")

主动触发异常/抛出异常

raise语句支持强制触发指定的异常

try:raise ZeroDivisionError("主动触发ZeroDivisionError异常")
except ZeroDivisionError as e:print(f"出现了异常ZeroDivisionError 异常信息->{e}")

异常传递

介绍:如果异常发生,但没有捕获处理异常,该异常会传递给调用者处理。如果所有的调用者都没有处理,最终会由系统处理。

def f2():print(10/0)def f1():try:f2()except Exception as e:print(f"f1()捕获异常{e}")

自定义异常

程序可以通过创建新的异常类命名自己的异常,无论直接还是简洁的方式,异常都应从Exception类派生

异常类通常应当保持简单,它往往只提供一些属性,允许相应的异常处理程序提取有关错误的信息。
大多异常命名都以Error结尾,类似标准异常命名,不要使用内置异常名

class AgeError(Exception):pass # Exception有构造器传入参数while True:try:age = int(input("请输入年龄(18-120):"))if not (18<=age<=120):raise AgeError("年龄需要在18-120之间")break # 正确的值不会抛出异常,会执行到该语句,否则继续执行while循环except ValueError as e:print("你输入的不是整数")except AgeError as e:print(e) #输出传参信息 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 依赖-组件tablepage-vue3说明文档,列表页快速开发,使用思路及范例(Ⅱ)搜索及数据获取配置项

github求⭐ vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例&#xff08;Ⅰ&#xff09;配置项文档 vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例&#xff08;Ⅱ&#xff09;搜索…

Linux命令-dris命令(显示和清空目录堆栈中的内容)

说明 dris命令 用于显示和清空目录堆栈中的内容。 语法 dris(选项)选项 n&#xff1a;显示从左边算起第n笔的目录&#xff1b; -n&#xff1a;显示从右边算起第n笔的目录&#xff1b; -l&#xff1a;显示目录完整的记录。

Java 8 Date API:深挖`LocalDate.plusWeeks(1)`方法的使用及潜在“陷阱”

这里写目录标题 引言方法介绍潜在“陷阱”与注意事项1. 对于跨越月份和年份边界的情况2. ISO周定义的影响3. 时间区间的理解和使用 正确使用与规避“陷阱”结语 引言 在Java 8中&#xff0c;日期时间API进行了全面改革&#xff0c;引入了新的java.time包&#xff0c;其中的Loca…

什么是享元模式,有哪些具体应用

一、定义 享元模式是一种通过尽可能多地共享数据来最小化内存使用和对象数量&#xff0c;从而提高性能的设计模式。在享元模式中&#xff0c;如果需要相同数据的多个对象&#xff0c;则共享这些对象而不是创建新的对象&#xff0c;从而提高系统的效率。 其实有很多应用场景&am…

数据库(1)

目录 1.什么是事务&#xff1f;事务的基本特性ACID&#xff1f; 2.数据库中并发一致性问题&#xff1f; 3.数据的隔离等级&#xff1f; 4.ACID靠什么保证的呢&#xff1f; 5.SQL优化的实践经验&#xff1f; 1.什么是事务&#xff1f;事务的基本特性ACID&#xff1f; 事务指…

kotlin基础学习教程以及代码案例

基础概念和知识点&#xff1a; Kotlin的基础语法涵盖了许多重要的知识点&#xff0c;以下是其中的一些核心要素&#xff1a; 变量与常量&#xff1a; var 关键字用于声明可变的变量。val 关键字用于声明只读的变量&#xff0c;即常量。const val 用于编译时常量&#xff0c;只…

Alibaba --- 如何写好 Prompt ?

如何写好 Prompt 提示工程&#xff08;Prompt Engineering&#xff09;是一项通过优化提示词&#xff08;Prompt&#xff09;和生成策略&#xff0c;从而获得更好的模型返回结果的工程技术。总体而言&#xff0c;其实现逻辑如下&#xff1a; &#xff08;注&#xff1a;示例图…

Kotlin - 时间 Duration

一、概念 用于表示时间度量&#xff0c;简化了时间单位的换算、计算时间差、操作间隔、比较等场景。 二、使用 2.1 创建 2.1.1 Number -> Duration 扩展函数适用于 Int、Long、Double。Duration 可以是正、负、零、正无穷大或负无穷大。 nanosecondspublic inline val Int…

napi系列学习进阶篇——NAPI异步调用

简介 OpenHarmony Napi 标准系统异步接口实现支持Callback方式和Promise方式。标准系统异步接口实现规范要求&#xff0c;若引擎开启Promise特性支持&#xff0c;则异步方法必须同时支持Callback方式和Promise方式。使用哪种方式由应用开发者决定&#xff0c;通过是否传递Call…

SpringMVC--获取请求参数 / 域对象共享数据

目录 1. SpringMVC 获取请求参数 1.1. 通过ServletAPI获取 1.2. 控制器方法形参获取 1.3. RequestParam 1.4. RequestHeader 1.5. CookieValue 1.6. 通过POJO获取请求参数 1.7. 解决获取请求参数的乱码问题 2. 域对象共享数据 2.1. 三大域对象 2.2. 准备工作 2.3. S…

RedisTemplate对象中方法的使用

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Redis是一个key-va…

第二届数据安全大赛暨首届“数信杯”数据安全大赛数据安全积分争夺赛-东区预赛wp

附件下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1tClZrup28n4fUe5Kpa7mgQ?pwdkbd6 文章目录 数据安全题re_ds001Homooo0 数据分析题数据分析1-1数据分析1-2数据分析1-3数据分析2-1数据分析2-2数据分析2-3数据分析3-1数据分析3-2数据分析3-3数据分析5-1数据…

【AI基本模型】简化生成对抗网络 (GAN)

目录 一、说明 二、GAN的工作 三、如何手动计算生成对抗网络&#xff08;GAN&#xff09;&#xff1f;✍️ 四、GAN的应用 一、说明 生成对抗网络 &#xff08;GAN&#xff09; 是一种机器学习算法&#xff0c;可以生成与现实世界数据几乎无法区分的合成数据。它们的工作原理是…

【计算机毕业设计】基于Java+SSM的实战开发项目150套(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享150的Java毕业设计&#xff0c;基于ssm框架&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业设计和课程…

js的filter函数

在JavaScript中&#xff0c;filter() 是一个数组方法&#xff0c;它创建一个新数组&#xff0c;其包含通过提供的函数实现的测试的所有元素。换句话说&#xff0c;filter() 函数遍历数组中的每个元素&#xff0c;并只将那些使测试函数返回 true 的元素包含在新数组中。 这里有…

python画神经网络图

代码1(画神经网络连接图&#xff09; from math import cos, sin, atan import matplotlib.pyplot as plt # 注意这里并没有用到这个networkx这个库&#xff0c;完全是根据matploblib这个库来画的。 class Neuron():def __init__(self, x, y,radius,nameNone):self.x xself.y …

h5增加的属性、标签和api

新增的属性&#xff1a; data-*属性&#xff1a;用于在HTML元素上存储自定义数据。placeholder属性&#xff1a;用于在表单元素中提供占位符文本。required属性&#xff1a;标记表单元素是否为必填项。autocomplete属性&#xff1a;控制表单元素的自动完成行为。download属性&…

短视频的11个流量密码

01原始欲望 每一个人都想着住豪宅、开豪车、吃大餐、赚大钱、看帅哥美女等&#xff0c;所以当你的视频里出现大量别人没有去过的美景&#xff0c;没有吃过的大餐&#xff0c;没有见过的金钱&#xff0c;和性感妖娆的美女&#xff0c;就会有人想点击去看。 对于男性来说&#…

Unity Android Release-Notes

&#x1f308;Android Release-Notes 收集的最近几年 Unity各个版本中 Android的更新内容 &#x1f4a1;WebGL Release-Notes 2023 &#x1f4a1;WebGL Release-Notes 2022 &#x1f4a1;WebGL Release-Notes 2021

单链表的冒泡,选择和插入排序

今天我们来看看单链表排序中的冒泡排序&#xff0c;插入排序&#xff0c;选择排序。 文章目录 冒泡排序交换值交换节点 插入排序交换节点 选择排序交换值交换节点 冒泡排序 交换值 首先我们来看看不交换节点&#xff0c;只进行值交换的形式&#xff0c;与数组下的实现思路一…