首页 > 其他分享 >16异常处理

16异常处理

时间:2023-04-26 13:56:23浏览次数:35  
标签:__ Exception 16 处理 except try print 异常

异常处理

异常

  • 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
  • 一般情况下,在Python无法正常处理程序时就会发生一个异常。
  • 异常是Python对象,表示一个错误。
  • 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

捕获异常

异常类型捕获

# 捕获常规异常
try:
    可能发生错误的代码
except:
    如果出行异常执行的代码

# 捕获指定异常
try:
    可能发生错误的代码
except NameError as e:  # e = 当前异常对象 
    如果出行异常执行的代码
    
# 捕获多个异常
try:
    可能发生错误的代码
except(NameError, ZeroDisvisionError):
    如果出行异常执行的代码
    
# 捕获全部异常(捕获常规异常也可以)
try:
    可能发生错误的代码
except Exception as e:  # e = 当前异常对象 
    如果出行异常执行的代码

常见异常类型

异常名称 描述
AttributeError 对象没有这个属性
OSError 操作系统错误
ImportError 导入模块/对象失败
IndexError 序列中没有此索引(index)
KeyError 没有这个键
NameError 未声明/初始化对象 (没有属性)
SyntaxError Python 语法错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
Warning 警告的基类

try-except-else

  • 如果抛出异常执行except内部代码
  • 如果程序正常执行else内部代码
# else异常
try:
    print(1)
except Exception as e:
    print(e)
else:
    print("我是else,是没有异常的时候执行的代码")

try-except-finally

不管程序有无发生异常,都将执行finally内部代码。

# 异常的Finally(无论是否有异常,都要执行的代码)
try:
    f = open("test.txt",'r')
except Exception as e:
    f = open("test.txt",'w')
else:
    print("未出现异常")
finally:
    f.close()

注意:else和Finally可写可不写

主动触发异常

  • 在实际开发中,在程序不满足某条件时,通常会主动抛出异常。
  • 语法:raise Exception()
# 判断煎饼熟了没,当烹饪时间小于5时,则主动触发没熟异常;否则熟了。
def test(level):
    if level<5:
        raise Exception("没熟没熟")

try:
    test(4)
except Exception as e:
    print(e)
else:
    print("熟了 请吃") 

自定义异常

  • 当需要自定义满足一些规则时,就可以自定义异常。
  • 自定义异常通过创建一个新的异常类,自定义名字与内容,并且需要继承Exception类实现。
# 判断密码长度  如果密码长度小于6 主动触发异常 并抛出异常信息(打印提示)
class ShortInputError(Exception):
    # 初始化方法
    def __init__(self, lenght, min_lenght):
        self.lenght = lenght
        self.min_lenght = min_lenght

    def __str__(self):
        return f"你输入的密码长度为{self.lenght},不能低于{self.min_lenght}"

def fun():
    try:
        password = input("请输入你的密码:")
        if len(password) < 6:
            raise ShortInputError(len(password), 6)  # 主动触发异常  并返回提示信息
    except Exception as e:
        print(e)
    else:
        print("密码已正确输入!")

fun()

断言

  • assert断言用于判断一个表达式,当表达式条件为False时触发断言异常AssertionError。
  • 注意:断言用于强制用户服从,可捕获,但是一般不捕获。
  • 语法:assert 表达式,返回数据
print("*" * 20)
if  2 == 2:
    raise AssertionError
print("*" * 20)
"""
print("*" * 20)该语句并不会执行,条件满足,触发了断言,后面的语句都不会再执行
"""

print("*" * 20)
if  2 == 2:
    # 捕获断言
    try:
        raise AssertionError
    except Exception as e:
        # 类的对象实例调用__class__属性时会指向该实例对应的类,而后再调用 __name__ 就会输出该实例对应的类的类名
        print(e.__class__.__name__)
print("*" * 20)
try:
    n = input("请输入一个数字:")
    assert n.isdigit(), "只能输入数字"  # assert 表达式,返回数据
    print("你输入的是:", n)
except Exception as ex:
    print("发现错误:", ex)
    
"""
请输入一个数字:s
发现错误: 只能输入数字
"""

标签:__,Exception,16,处理,except,try,print,异常
From: https://www.cnblogs.com/daguo118/p/17355676.html

相关文章

  • mysql处理CVE-2023-21912漏洞
    目录背景解决办法系统现状思考升级过程(离线)1.查看Centos版本2.查看数据库版本3.数据库离线下载地址4.解压安装包5.停止mysql服务5.备份数据库文件6.卸载当前数据库版本7.本地安装8.启动mysql辅助操作查看含有mysql文件路径查找mysql配置文件查看文件占用大小当前目录查......
  • Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库
    前言  mysql驱动版本msvc2015x32版本调好,mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5.9.3,于是本篇编译mysql驱动的msvc2017x64版本,满足当前的特定需求,这次过程有点费劲,可能是Qt的版本低于Qt5.12,继续无保留分享......
  • SpringSecurity从入门到精通:从数据库查询权限信息&自定义失败处理
    从数据库查询权限信息      记得打开redis      自定义失败处理我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json,这样可以让前端能对响应进行统一的处理。要实现这个功能我们需要知道SpringSecurity......
  • SpringBoot2 hikari关于 Failed to validate connection com.mysql.cj.jdbc.Connectio
    项目启动不报错,如果静默15分钟没有数据库操作就报上述错误WARN不影响程序运行Failedtovalidateconnectioncom.mysql.cj.jdbc.ConnectionImpl@16244d67(Nooperationsallowedafterconnectionclosed.).PossiblyconsiderusingashortermaxLifetimevalue.发现Spri......
  • 从数据库查询权限信息与自定义失败处理
    从数据库查询权限信息代码实现我们只需要根据用户id去查询到其所对应的权限信息即可。​  所以我们可以先定义个mapper,其中提供一个方法可以根据userid查询权限信息。packagecom.example.qinghuatokendemo.Mapper;importc......
  • 通过SDK接入EasyCVR平台,设备录像文件出现播放异常的原因排查与解决
    EasyCVR视频融合平台基于云边端一体化架构,部署轻快、功能灵活,平台可支持多协议、多类型设备接入,包括:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等。平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、智能分析以及......
  • mybatis与jstl异常汇总
    1,roblemaccessing/moviePlay/goMoviePlay/1/1/1.Reason:  /WEB-INF/views/workdetail.jsp(92,15)PWC6031:Unterminated<c:settagCausedby:org.apache.jasper.JasperException:/WEB-INF/views/workdetail.jsp(92,15)PWC6031:Unt......
  • LeetCode 1643. 第 K 条最小指令
    康托展开一开始无脑枚举全排列,果断超时,还是得看看如果降低计算量。题目destination=[2,3],相当于2个V,3个H,输出全排列去重后的对应位置字典序列内容。忽略去重则问题为全排列,所有可能为:\[(\sumdestination)!=(2+3)!=5!\]k恰好为康托展开结果+1,直接逆向......
  • CF1621A Stable Arrangement of Rooks
    题目简述:一个n*n的棋盘上,放上k个车,使得一任意车向上下左右移动一格(这里的车可以上下左右移动任意步数)后不与其他车相撞(注:不能走出棋盘之外)。个人分析:从题目可知,在车上下左右移动一格后不会与其他车相撞,换句话说,两辆车之间至少相隔一行一列,放在对角线上是最优想法,若无解则......
  • 快速上手Linux核心命令(五):文本处理三剑客
    @目录前言正则表达式第一剑客grep第二剑客sed第三剑客awk小结剑仙镇楼~O(∩_∩)O前言上一篇中已经预告,我们这篇主要说Linux文本处理三剑客。他们分别是grep、sed、awk。既然能被业界称为三剑客,可见其在Linux命令中占有举足轻重得地位。所以呢,这里也专门写一篇文章说一说......