python中if错误-python中的异常处理

2023-11-09

异常

异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下

1316789-20180315205500451-1604614440.png

异常种类

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误

常见异常:

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x

IOError 输入/输出异常;基本上是无法打开文件

ImportError 无法引入模块或包;基本上是路径问题或名称错误

IndentationError 语法错误(的子类) ;代码没有正确对齐

IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

KeyError 试图访问字典里不存在的键

KeyboardInterrupt Ctrl+C被按下

NameError 使用一个还未被赋予对象的变量

SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)

TypeError 传入对象类型与要求的不符合

UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,

导致你以为正在访问它

ValueError 传入一个调用者不期望的值,即使值的类型是正确的

其他异常:

ArithmeticError

AssertionError

AttributeError

BaseException

BufferError

BytesWarning

DeprecationWarning

EnvironmentError

EOFError

Exception

FloatingPointError

FutureWarning

GeneratorExit

ImportError

ImportWarning

IndentationError

IndexError

IOError

KeyboardInterrupt

KeyError

LookupError

MemoryError

NameError

NotImplementedError

OSError

OverflowError

PendingDeprecationWarning

ReferenceError

RuntimeError

RuntimeWarning

StandardError

StopIteration

SyntaxError

SyntaxWarning

SystemError

SystemExit

TabError

TypeError

UnboundLocalError

UnicodeDecodeError

UnicodeEncodeError

UnicodeError

UnicodeTranslateError

UnicodeWarning

UserWarning

ValueError

Warning

ZeroDivisionError

异常处理

python解释器检测到错误,触发异常(也允许程序员自己触发异常)。程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)。如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理。

python解释器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性。良好的容错能力,能够有效的提高用户体验,维持业务的稳定性。

程序运行中的异常可以分为两类:语法错误和逻辑错误。首先,我们必须知道,语法错误跟异常处理无关,所以我们在处理异常之前,必须避免语法上的错误。

异常处理的方式

1.使用if判断式

#我们平时用if做的一些简单的异常处理

num1=input('>>:') #输入一个字符串试试

ifnum1.isdigit():

int(num1)#我们的正统程序放到了这里,其余的都属于异常处理范畴

elifnum1.isspace():print('输入的是空格,就执行我这里的逻辑')elif len(num1) ==0:print('输入的是空,就执行我这里的逻辑')else:print('其他情情况,执行我这里的逻辑')

#这些if,跟代码逻辑并无关系,显得可读性极差,如果类似的逻辑多,那么每一次都需要判断这些内容,就会倒置我们的代码特别冗长。

使用if判断式可以异常处理,但是if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。而且在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差。

2.python提供的特定的语法结构

part1:基本语法

try:

被检测的代码块except异常类型:

try中一旦检测到异常,就执行这个位置的逻辑

part2:单分支

#单分支只能用来处理指定的异常情况,如果未捕获到异常,则报错

try:

aexcept NameError as e: #我们可以使用except与as+变量名 搭配使用,打印变量名会直接输出报错信息

print(e) #name 'a' is not defined

part3:多分支

l1 = [('电脑',16998),('鼠标',59),('手机',8998)]while 1:for key,value in enumerate(l1,1):print(key,value[0])try:

num= input('>>>')

price= l1[int(num)-1][1]exceptValueError:print('请输入一个数字')exceptIndexError:print('请输入一个有效数字')#这样通过异常处理可以使得代码更人性化,用户体验感更好。

part4:万能异常

在python的异常中,有一个万能异常:Exception,他可以捕获任意异常。它是一把双刃剑,有利有弊,我们要视情况使用

如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么只有一个Exception就足够了。

如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了。我们可以使用多分支+万能异常来处理异常。使用多分支优先处理一些能预料到的错误类型,一些预料不到的错误类型应该被最终的万能异常捕获。需要注意的是,万能异常一定要放在最后,否则就没有意义了。

part5:try...else语句

try:for i in range(10):

int(i)exceptIndexError as e:print(e)else:print('***********') #*********** 执行了此处

#当try语句中的代码没有异常,被完整地执行完,就执行else中的代码

part6:try...finally语句

defdealwith_file():try:

f= open('file',encoding='utf-8')for line inf:

int(line)returnTrueexceptException as e:print(e)returnFalsefinally:'''不管try语句中的代码是否报错,都会执行finally分支中的代码'''

'''去完成一些连接操作的收尾工作'''

print('finally 被执行了')

f.close()

ret=dealwith_file()print(ret)

part7:主动触发异常

try:raise TypeError('类型错误')exceptException as e:print(e)

part8:自定义异常

copycode.gif

classEvaException(BaseException):

def __init__(self,msg):

self.msg=msg

def __str__(self):

returnself.msg

try:

raise EvaException('类型错误')

exceptEvaException as e:

print(e)

copycode.gif

part9:断言

assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。

assert的异常参数,其实就是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题。格式如下:

assert expression [, arguments]

assert 表达式 [, 参数]

assert len(lists) >=5,'列表元素个数小于5'

assert 2==1,'2不等于1'

备注:格式:assert 条件 , 条件为false时的错误信息 结果为raise一个AssertionError出来

#assert 条件

assert 1 == 1

assert 1 == 2

part10:try..except的方式比较if的方式的好处

try..except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性

异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需"写多个if判断式’)减少了代码,增强了可读性

异常处理语法的小结:

try:#可能发生异常的代码

except异常类型1 as 变量名:print(变量名) #变量名存储的是具体的错误信息

except异常类型2 as 变量名:print(变量名) #变量名存储的是具体的错误信息

exceptException as 变量名:print(变量名) #变量名存储的是具体的错误信息

else:print('如果以上代码没有发生异常以及异常处理工作就执行这里的代码')print('一般情况下else中的代码用来下结论')#logging模块

finally:print('不管代码是否有异常都会执行,且在函数中遇到return仍然会执行')print('一般情况下用于这个函数中资源的回收')

先完成功能 在测试的时候 一边修改代码 一边加上异常处理,只要加上异常处理,一定要写日志,不要在大段的代码外直接套上异常处理。应该是在具体的逻辑上(具体的细节处的代码段)加上细粒度异常处理。对于可以预料到的异常 一定要尽力的疏导 如果不能解决 必须要写上提示以及引发错误的原因

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中if错误-python中的异常处理 的相关文章

  • MySQL之UPDATE与SELECT结合语法详解与实例

    第一种 语法 UPDATE table1 SET column1 SELECT column FROM table2 WHERE condition WHERE table1 column2 value 注 若不加where条件则是更新表中
  • 进度 060706-060724

    新进度从060706 开始 ESOE v0 2 进度记录 9 060724 内存泄漏降低到实用程度 测试例子100次刷新小于500k 不再优化 并加入析构机制 下一步工作整理说明书 8 在框架页面下出现严重的javascript内存泄漏问题
  • java 驼峰和下划线互相转换

    其实是很简单的正则表达式转换 直接上代码 驼峰转下划线 param str 目标字符串 return java lang String public static String humpToUnderline String str Stri
  • LVM动态扩容逻辑卷详解

    LVM逻辑卷管理 简介 LVM是逻辑卷管理 Logical Volume Manager 的简称 它是Linux环境下对磁盘分区进行管理的一种机制 LVM是建立在硬盘和分区之上的一个逻辑层 来提高磁盘分区管理的灵活性 LVM最大的特点就是可
  • Openldap导入数据(一)

    在安装完openldap之后 默认ldap中是没有数据的 需要管理员进行添加 当然添加的方法也不止一种 这里先介绍第一种方法 从本地系统添加用户到ldap中 root ldapsrv01 ldapsearch x b dc contoso
  • ES查询不存在的索引,索引未创建导致查询报错

    ES查询不存在的索引 索引未创建导致查询报错 项目中的一个es索引是根据时间建立的 在对其操作时候 因时间原因此索引为创建 查询时候报如下错误 Elasticsearch exception type index not found exc
  • Swagger配置完成以后,登录账户名和密码的设置

    spring security basic path swagger ui html enabled true user name admin 账号 password 123456 密码
  • ajax长轮询tornado,数据可用时如何完成Tornado长轮询请求

    我有很长的编程背景 但对Python还不熟悉 我正在研究Tornado 以构建一个长轮询服务的原型 在 我想实现的是用户连接说example com get 1234 这是长轮询部分 1234是用户ID 目前 它只是挂起并等待内容 然后用户
  • 【从零开始的Java开发】1-2-4 Java方法

    文章目录 方法 方法分类 数组作为方法参数 方法重载 基本数据类型的传值 数组的传值 引用数据类型 可变参数列表 可变参数列表作为方法参数的重载 文档注释 方法的调试 细节与总结 方法 所谓方法 就是用来解决一类问题的代码的有序组合 是一个
  • MCU,MPU,MMU,CACHE的含义

    1 mcu和mpu CPU Central Processing Unit 中央处理器 发展出来三个分枝 一个是DSP Digital Signal Processing Processor 数字信号处理 另外两个是MCU Micro Co
  • HTML <colgroup> 标签

    实例 两个 colgroup 元素为表格中的三列规定了不同的对齐方式和样式 注意第一个 colgroup 元素横跨两列 table width 100 border 1 table
  • [138]小米笔记本怎么关闭secure boot

    关闭Secure Boot的步骤 一 关闭 快速启动 功能 1 右键 开始菜单 电源选项 进入后 点击 选择电源按钮的功能 2 进入电源选项设置后 点击 更改当前不可用的设置 再把 启用快速启动 推荐 前边的勾去掉 若没有该选择则不需要操作
  • MDK与芯片的联系

    程序执行的时候FLASH空间 code RO data 程序执行时SRAM空间 RW data ZI data 程序存储时占用空间 code RO data RW data 在目录下打开命令行窗口 按shift 鼠标右键 gt 可以将信息输
  • 区块链:Solidity值类型(Solidity 枚举Enums & 结构体Structs)

    枚举Enums 案例 pragma solidity 0 4 4 contract test enum ActionChoices GoLeft GoRight GoStraight SitStill ActionChoices choic
  • 华为OD机试 C++ 叠积木

    题目 你手里有一堆砖头 它们都有一样的宽和高 但长度不同 你想用这些砖头堆砌一堵墙 每一层墙可以只用一个砖头 也可以用两个拼接起来 但这两种情况下 每层的长度必须都是一样的 如果你想使用所有的砖头 并堆砌出尽可能多的层数 那么最多可以搭建多
  • C#(winform)调用pytorch模型

    winform调用pytorch上训练好的unet模型 项目是写一个辅助诊断系统软件 用winform写软件 调用pytorch和matlab的模型 这篇博客只包含调用pytorch模型的部分 1 c libtorch 调用模型 2 c 生
  • java使用aspose.pdf或者spire.pdf 将pdf文件转word,实测

    1 aspose pdf aspose pdf不是破解版的只能转3页 所以我弄了个破解版 aspose pdf破解版在网上都有破解方法也比较简单 这里就不说了 直接引入破解版的jar包 在这里我用的是aspose pdf 21 11 jar
  • Qt第四十五章:QComboBox 禁止滚轮

    很简单 直接反射将QComboBox的wheelEvent方法重置掉即可 self combo box QComboBox self setattr self combo box wheelEvent lambda a None
  • 车联网Apollo(阿波罗),研究carlife车机端集成及开发,(WeLink,carplay/carlife)

    Apollo 阿波罗 是携程框架部门研发的分布式配置中心 能够集中化管理应用不同环境 不同集群的配置 配置修改后能够实时推送到应用端 并且具备规范的权限 流程治理等特性 适用于微服务配置管理场景 https github com ctrip
  • C语言提取一列数据并保存

    c语言求教 txt文档只有一列数据但是有很多 需要把它提取出来 每1024个数保存在一个文件中 求大神指教 c语言

随机推荐

  • 什么时候需要使用引用?使用引用的好处是什么?

    作者 谢之易 链接 https www zhihu com question 34267829 answer 58414818 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 记忆里 C 的设计与演化 一书提
  • 【华为机试真题 Python实现】仿 LISP 运算【2022 Q1 Q2

    题目描述 LISP 语言唯一的语法就是括号要配对 形如 OP P1 P2 括号内元素由单个空格分割 其中第一个元素 OP 为操作符 后续元素均为其参数 参数个数取决于操作符类型 注意 参数 P1 P2 也有可能是另外一个嵌套的 OP P1
  • 语音识别-初识

    ASRT https blog ailemon net 2018 08 29 asrt a chinese speech recognition system ASR Automatic Speech Recognition Paddle
  • 计算机加入域的一种方法

    重装系统后 想把机子加入域 却总是不成功 隐约记得以前老大们讲过 厚着脸皮问了 o 之后 决定记下来 省的我以后又忘了 计算机加入域 一 在网络中加入DNS地址 二 step 1 更改计算机名字 右键点击 我的电脑 打开 属性 页面 找到
  • redis-benchmark测试Redis集群性能

    基础环境配置 Redis5 三主三从cluster 1 100个并发连接 100000个请求 检测host为172 16 254 124端口为7004的redis服务器性能 redis benchmark h 172 16 254 124
  • C# 单例模式详解

    定义 单例模式是比较常见的一种设计模式 目的是保证一个类只能有一个实例 而且自行实例化并向整个系统提供这个实例 避免频繁创建对象 节约内存 单例模式的应用场景很多 比如我们电脑的操作系统的回收站就是一个很好的单例模式应用 电脑上的文件 视频
  • 2023年大唐杯仿真部分-5G信令流程仿真实验

    参考视频连接 第十届大唐杯信令流程仿真讲解 哔哩哔哩 bilibili 1 5G系统消息的获取 根据题目要求 UE开机需要获取消息 消息分别是MIB SIB1 SIB2 SIB3 上面为什么选的是SIB1 Systeminformation
  • 如何判断一个指定的经纬度点是否落在一个多边形内

    1 理论支持 如果从需要判断的点出发的一条射线与该多边形的焦点个数为奇数 则该点在此多边形内 否则该点在此多边形外 射线不能与多边形顶点相交 2 编程思路 该程序的思路是从A点出发向左做一条水平射线 平行于x轴 向X轴的反方向 判断与各边是
  • Golang实现一个事务型内存数据库

    内存数据库经我们经常用到 例如Redis 那么如何从零实现一个内存数据库呢 本文旨在介绍如何使用Golang编写一个KV内存数据库MossDB 特性 MossDB是一个纯Golang编写 可嵌入的 键值型内存数据库 包含以下特性 可持久化
  • 【spring】spring 的事务(transaction) 三 try catch对事务的影响

    文章目录 概述 1 非异常用例 1 1 创建工程 1 2 执行 2 内层抛出非check异常 外层进行捕获 3 内层抛出非check异常 外层不进行捕获 相关文章 spring 的事务 transaction 一 基础概念介绍 spring
  • 群晖NAS如何在内网部署HTTPS服务让浏览器信任证书

    前言 最近在折腾内部部署Web服务 通过Vue实现一个H5的内部的管理服务 但在实际部署过程中由于种种原因 必须部署成Https服务 但在部署成Https服务后 由于没有HTTPS证书 每次进入页面都会被浏览器拦截 使用起来非常不便 于是开
  • Pandas 过滤dataframe中包含特定字符串的数据

    假如有一列全是字符串的dataframe 希望提取包含特定字符的所有数据 该如何提取呢 因为之前尝试使用filter 发现行不通 最终找到这个行得通的方法 举例说明 我希望提取所有包含 Mr 的人名 1 首先将他们进行字符串化 并得到其对应
  • 国内iso镜像站点

    http mirrors aliyun com centos
  • vue小项目实战

    项目概念图 devWebpackConfig plugins push new FriendlyErrorsPlugin compilationSuccessInfo messages Your application is running
  • shopify网站如何提高视觉冲击力

    1 首屏使用视频 2 页面引入酷炫动画 3 使用对比强烈的色彩
  • CSS-定位-背景图

    定位 背景图 一 定位 position 1 相对定位 relative 2 绝对定位 absolute 3 固定定位 fixed 4 定位练习 二 背景图 background 1 属性 2 实例一 3 背景图定位 4 雪碧图的使用 三
  • 12款很赞的web前端移动开发框架

    原生移动应用程序运行更快 更顺畅 有更好的用户体验 而同时 前端开发人员总是寻找新的 Web 技术来获得这种性能 利用现有的高质量移动框架来构建移动 Web 应用程序已成为非常容易 但是如何选择合适的框架是比较纠结的 因此在本文中 我们整理
  • 刷简单的题也很吃力怎么办?

    文章目录 一 分享自己相关的经历 1 1 刷简单题目感到吃力的原因 1 2 解决该问题的重要性和目的 二 分析可能存在的问题 三 根据问题进行分解或建立思维导图 四 分享好用的刷题网站并进行介绍 明明自觉学会了不少知识 可真正开始做题时 却
  • POI操作ppt,合并,转图片

    引入POI compile group org apache poi name poi ooxml version 4 1 0 compile group batik name batik bridge version 1 6 1 comp
  • python中if错误-python中的异常处理

    异常 异常就是程序运行时发生错误的信号 在python中 错误触发的异常如下 异常种类 在python中不同的异常可以用不同的类型 python中统一了类与类型 类型即类 去标识 不同的类对象标识不同的异常 一个异常标识一种错误 常见异常