Python 异常处理

当程序遇到问题时不让程序结束,而通过错误继续向下执行。

概述

作用

用来检测try语句块中的错误,从而让except语句捕获错误信号并处理

格式

try:处理语句
except 错误类型 as e:错误1执行语句
except 错误类型 as e:错误2执行语句
.....
except 错误类型 as e:错误n执行语句
else:语句

注意:else语句可有可无

逻辑

当程序执行到try-except-else语句时:

1.如果当try“处理语句”执行出现错误,会匹配第一个错误类型,

如果匹配上就执行对应“语句”

2.如果当try“处理语句”执行出现错误,没有匹配的异常类型,

错误将会被提交到上一层的try语句;或者到程序的最上层。

3.如果设置else了当try“处理语句”执行没有出现错误,执行else下的“语句。

简单的异常处理

使用except而不是用任何错误类型

示例如下:

try:# 一个未定义的变量name
except:print('程序出现错误!')# 执行结果
# 程序出现错误!

判断错误类型处理

通过数值类型的1加字符串类型的1111,因为try-except程序没有抛出异常并终止操作;

而是检测到错误类型给出相应提示并继续执行。

示例如下:

try:print(1 + '1111')
except NameError as e:print('名称未定义:', e)
except TypeError as e:print('类型错误:', e)print('------- END -------')# 执行结果
# 类型错误: unsupported operand type(s) for +: 'int' and 'str'
# ------- END -------

并行检测多种异常

还可以使用except并行检测多中异常,如下对名称错误和类型错误进行相同处理。

示例如下:

try:print(1 + '1111')
except (NameError, TypeError) as e:print('名称错误 or 类型错误:', e)print('------- END -------')# 执行结果
# 名称错误 or 类型错误: unsupported operand type(s) for +: 'int' and 'str'
# ------- END -------

使用else

else可根据情况添加,可用于设置依赖上面处理成功才可执行的操作;

如果上面执行出错,则不会执行else内容。

示例如下:

try:num = 1
except (NameError, TypeError) as e:print('名称错误 or 类型错误:', e)
else:num += 1print('代码执行成功', num)# 执行结果
# 代码执行成功 2

使用基础异常类

错误其实是class(类),所有的错误都是继承自BaseException,

所以可以使用它捕获所有类型(包括子类)的错误。

示例如下:

try:print(1 + '1111')
except BaseException as e:print('基类异常捕获:', e)
except TypeError as e:print('类型错误:', e)print('------- END -------')# 执行结果
# 基类异常捕获: unsupported operand type(s) for +: 'int' and 'str'
# ------- END -------

跨越多层调用

在main中调用fun2,fun2方法中调用fun1。但只是在main方法中进行捕获错误,

也可以捕获到调用fun1产生的错误。

示例如下:

def fun1(num):print(1 / num)
def fun2(num):fun1(num)
def main():fun2(0)try:main()
except ZeroDivisionError as e:print('出现了错误')# 执行结果
# 出现了错误

断言

断言也就是assert 语句,通常用于检查用户的输入是否符合规定,还经常用作程序初期测试和调试过程中的辅助工具;当出现设置的断言时,程序会抛出相应设置错误,这有利于对程序进行拍错,提高程序的健壮性。

示例如下:

def get_student(name):assert (type(name) == str), 'name 必须为字符串类型'print(name)get_student(11)

当结果为True时,程序继续执行;否则抛出设置错误。

结果如下:

Traceback (most recent call last):File "E:\lianxipy\day3\异常处理.py", line 88, in <module>get_student(11)File "E:\lianxipy\day3\异常处理.py", line 83, in get_studentassert (type(name) == str), 'name 必须为字符串类型'
AssertionError: name 必须为字符串类型

finally

格式:try-except-finally

作用:finally中的语句无论是否有错误都将执行。

示例如下:

try:num
except NameError as e:print('名称错误:', e)
except TypeError as e:print('类型错误:', e)
finally:print('必须执行语句')# 执行结果
# 名称错误: name 'num' is not defined
# 必须执行语句

标准异常列表

异常名称

描述

BaseException

所有异常的基类

SystemExit

解释器请求退出

KeyboardInterrupt

用户中断执行(通常是输入^C)

Exception

常规错误的基类

StopIteration

迭代器没有更多的值

GeneratorExit

生成器(generator)发生异常来通知退出

StandardError

所有的内建标准异常的基类

ArithmeticError

所有数值计算错误的基类

FloatingPointError

浮点计算错误

OverflowError

数值运算超出最大限制

ZeroDivisionError

除(或取模)零 (所有数据类型)

AssertionError

断言语句失败

AttributeError

对象没有这个属性

EOFError

没有内建输入,到达EOF 标记

EnvironmentError

操作系统错误的基类

IOError

输入/输出操作失败

OSError

操作系统错误

WindowsError

系统调用失败

ImportError

导入模块/对象失败

LookupError

无效数据查询的基类

IndexError

序列中没有此索引(index)

KeyError

映射中没有这个键

MemoryError

内存溢出错误(对于Python 解释器不是致命的)

NameError

未声明/初始化对象 (没有属性)

UnboundLocalError

访问未初始化的本地变量

ReferenceError

弱引用(Weak reference)试图访问已经垃圾回收了的对象

RuntimeError

一般的运行时错误

NotImplementedError

尚未实现的方法

SyntaxError

Python 语法错误

IndentationError

缩进错误

TabError

Tab 和空格混用

SystemError

一般的解释器系统错误

TypeError

对类型无效的操作

ValueError

传入无效的参数

UnicodeError

Unicode 相关的错误

UnicodeDecodeError

Unicode 解码时的错误

UnicodeEncodeError

Unicode 编码时错误

UnicodeTranslateError

Unicode 转换时错误

Warning

警告的基类

DeprecationWarning

关于被弃用的特征的警告

FutureWarning

关于构造将来语义会有改变的警告

OverflowWarning

旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning

关于特性将会被废弃的警告

RuntimeWarning

可疑的运行时行为(runtime behavior)的警告

SyntaxWarning

可疑的语法的警告

UserWarning

用户代码生成的警告

总结

异常处理在python 功能开发中应用很广泛,当出现错误后,用于保存错误原因和调试功能很方便。

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

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

相关文章

【三哥说技术】第10集 FOC电机控制板硬件原理图的绘制十天从小白到高手

【三哥说技术】第10集 FOC电机控制板硬件原理图的绘制十天从小白到高手 三哥说技术第10集 FOC电机控制板硬件原理图的绘制十天从小白到高手#PCB设计 #电子工程师 #硬件设计 #入门教程 #FOC控制 #直流无刷电机 #机器人关

vue七牛云上传图片

1.安装七牛云 npm安装 npm install qiniu-jsyarn安装 yarn add qiniu-js在单个页面引入 import * as qiniu from "qiniu-js";<van-uploader :after-read"afterRead" :before-delete"beforeDelete" :max-count"1" v-model"…

【从JVM看Java,三问继承和多态,是什么?为什么?怎么做?深度剖析JVM的工作原理】

系列文章&#xff1a; 《计算机底层原理专栏》&#xff1a;欢迎大家订阅学习&#xff0c;能够帮助到各位就是对我最大的鼓励&#xff01; 文章目录 系列文章目录前言一、JVM是什么二、什么是继承三、什么是多态总结 前言 这篇文章聚焦JVM的实现原理&#xff0c;我更专注于从一…

身份证mod11-2校验规则

这几天碰到一个需求是实现身份证最后一位的校验&#xff0c;需求文档里面写了个公式&#xff0c;没看懂&#xff08;数学早就还给老师了&#xff09;&#xff0c;于是各种查资料&#xff0c;发现网上的资料要么只给了说明&#xff0c;要么给了个固定的代码&#xff0c;但是写的…

SRE体系建设指南

sre体系建设指南 一、团队建设 指导思想 拥抱风险&#xff1a;容忍风险、度量风险、管理风险、研究当前高频故障原因和主要风险&#xff1b;演进式、SLO目标内允许故障 工作准则&#xff1a;专注改进设计、专注研发工作&#xff1b;把可靠性工作纳入软件各阶段、简单化、减…

怎样将Halcon导出的数据显示在textBox中

其中textBox1是文本框的名字&#xff0c;hv_Row时一个数组&#xff0c;.D.我的理解是DATA,即数据的意思&#xff0c;“0.00”是显示的数值保留两位小数点的意思。

Java 实现解压 .tar.gz 这种格式的压缩包,递归文件夹,找到tar.gz 格式的压缩包,并且进行解压,解压到这个压缩包所在的文件夹下

目录 1 问题2 实现 1 问题 Java 实现解压 TR_2023063012.tar.gz 这种格式的压缩包 递归文件夹&#xff0c;找到tar.gz 格式的压缩包&#xff0c;并且进行解压&#xff0c;解压到这个压缩包所在的文件夹下 2 实现 public static void main(String[] args) {String depth &qu…

数据库系统概述之数据库优化

为什么需要进行优化&#xff1f; 数据库性能瓶颈 数据库服务器的性能受许多因素影响&#xff0c;包括硬件能力、系统规模、业务模型及架构、代码设计、数据库表设计、系统环境等。 因此&#xff0c;可以从几个方面进行数据库优化 喜欢点赞收藏&#xff0c;如有疑问&#xff…

Google Earth Engine——如何批量下载海洋盐度温度数据

简介: 之前写过一篇关于海洋温度数据集的博客Google Earth Engine ——HYCOM 数据子集包含变量海洋温度数据集_此星光明的博客-CSDN博客 混合坐标海洋模式(Hybrid Coordinate Ocean Model,HYCOM)是一个数据同化混合等值-Σ-压力(广义)坐标海洋模式。EE 中的 HYCOM 数据…

RabbitMQ快速学习之WorkQueues模型、三种交换机、消息转换器(基于SpringBoot)

文章目录 前言一、WorkQueues模型消息发送消息接收能者多劳 二、交换机类型1.Fanout交换机消息发送消息接收 2.Direct交换机消息接收消息发送 3.Topic交换机消息发送消息接收 三、编程式声明队列和交换机fanout示例direct示例基于注解 四、消息转换器总结 前言 WorkQueues模型…

关键词挖掘软件-免费批量挖掘关键词的工具

在当今数字化时代&#xff0c;网站的曝光和排名对于吸引流量至关重要。而在这个大数据的背后&#xff0c;SEO&#xff08;Search Engine Optimization&#xff0c;搜索引擎优化&#xff09;成为许多网站主和创作者们追逐的关键。在SEO的世界里&#xff0c;关键词的选择和优化是…

mybatis(mybatis-plus)报invalid bound statement (not found)或者找不到xml文件(各种情况)

情况1&#xff1a;查看yml文件是否添加mybatis配置 mybatis-plus:# Mapper.xml 文件位置 Maven 多模块项目的扫描路径需以 classpath*: 开头# 实现接口绑定mapperLocations: classpath*:mybatis/xml/*Mapper.xml情况2&#xff1a;区分使用的的版本是mybatis还是mybstis-plus&a…

spring security 艰苦学习中

一、初次感知 1.jwt工具类 密钥secret 有点意思。 2.PasswordEncoder 对密码进行加密&#xff0c;在配置类中返回bean. 下面这个关于加密和解密的东西是有误导性的。

用customize-cra+react-app-rewired配置less+css module

1. 安装 npm i less less-loader -D npm i customize-cra-less-loader -D2.添加配置项 //config-overrides.js const { override } require(customize-cra); const addLessLoader require("customize-cra-less-loader");module.exports {webpack: override(addL…

maven的package和install命令有什么区别以及Maven常用命令与GAV坐标与Maven依赖范围与Maven依赖传递与依赖排除与统一声明版本号

maven的package和install命令有什么区别以及Maven常用命令与GAV坐标与Maven依赖范围与Maven依赖传递与依赖排除与统一声明版本号 一: maven的package和install命令有什么区别 一般都与clean命令结合使用 mvn package 生成target目录&#xff0c;编译、测试代码&#xff0c;…

锚索测力计与振弦采集仪组成桥梁安全监测

锚索测力计与振弦采集仪组成桥梁安全监测 在桥梁工程中&#xff0c;安全监测一直是一个重要的方面。桥梁安全监测可以及时发现桥梁的变形、裂缝、位移等问题&#xff0c;为及时修复或维修提供重要的依据。而锚索测力计和振弦采集仪作为桥梁安全监测的两个主要工具&#xff0c;…

内衣洗衣机和手洗哪个干净?内衣洗衣机便宜好用的牌子推荐

单纯的用手清洗内衣&#xff0c;是很难的清洁到内衣物上的每一个角落的污渍。另外&#xff0c;手洗时所用的水以及香皂并不能彻底杀死衣物上的细菌&#xff0c;反而会在内衣物上滋生细菌。长时间穿这种内衣&#xff0c;对身体有潜在的危害。相比较而言&#xff0c;专用的内衣洗…

Mysql基础补偿篇:创建主键索引、唯一索引、普通索引、联合索引、前缀索引,删除索引。

Mysql索引基础篇&#xff1a;什么是聚簇索引什么是非聚簇索引、索引的最左前缀原则、索引下推、索引覆盖、回表 主键索引 在创建表时&#xff0c;指定主键&#xff0c;数据库会自动生成主键主键索引 CREATE TABLE student (id INT(10) UNSIGNED AUTO_INCREMENT ,age INT(10)…

pg 数据库实现 sql 语句批量更新表里面一个字段里面的某几个字

目录 1 问题2 解决 1 问题 一个表里面的一个字段的值里面的数据比较长&#xff0c;比如是一段话&#xff0c;想要将这个字段里面值的 某几个字 改成其他的&#xff0c;如何批量操作 2 解决 要批量更新表中一个字段的某几个字&#xff0c;你可以使用 SQL 的 UPDATE 语句结合字…

Flutter加固原理及加密处理

​ 引言 为了保护Flutter应用免受潜在的漏洞和攻击威胁&#xff0c;加固是必不可少的措施之一。Flutter加固原理主要包括代码混淆、数据加密、安全存储、反调试与反分析、动态加载和安全通信等多个方面。通过综合运用这些措施&#xff0c;可以提高Flutter应用的安全性&#xf…