百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python异常捕获和处理,代码异常报错也能那么和谐且个性

off999 2024-11-19 08:33 20 浏览 0 评论

前言

代码出现异常而报错再正常不过了,但为什么要处理异常?

由于异常的存在,代码运行时会出现一大堆的红色字体提示,对于程序员还好,见红色报错见多了习惯了,但如果你开发出来的东西要给别人看,那么不懂代码的人就会一脸懵逼,对产品的印象都不太好了。

私信小编01即可获取大量Python学习资源

比如我们经常简单网页丢失的情况,其实是就是网页代码执行时发生了异常,但有的网页还是很个性的,提示的信息可能是比较人性化的,比如你收藏的文章被后台删除了,导致直接跳到这个界面的代码无法执行,此时的报错信息是这样的:

但有些产品在开发时想得并不是那么周到,没有体会用户端的感受,结果某个程序出错了,用户能看到一堆报错代码,好感度直线下降。

首先这篇文章所讲的异常不是指教你如何让代码不报错,代码异常出错得进行调试来解决,这不是我们这里的重点,今天的重点是在代码可能报错的地方进行优化和个性化,让错误看起来也比较和谐。

其次这也是Python新手入门教程系列文章的一个重要板块,可以给以后的开发奠定良好的异常处理基础,代码总会有异常,但有的异常在别人看来却毫无违和感,这都来源于拥有扎实的异常捕获基本功。

?一、异常的定义

异常是一个事件,该事件在程序执行过程中发生,影响程序的正常执行。一般情况下,Python无法正常处理程序时就会发生一个异常。

例如我在代码中只写了一个变量a,运行程序,pycharm无法识别这个变量,所以报错,便是出现了异常。

二、异常的处理

所以我们需要掌握处理异常的方法,处理异常的方法有很多种,接下来我们一个个来看。

1.try-except

它能够将可能出错的代码进行处理,处理后报错的红色字体将会转换成简短的、正常的字体,用法如下:

try:
    有可能出现异常的代码
except 异常类型 as 变量
	处理后的代码

举例:直接打印变量a会报错。

经过tyr-except处理过一下:

try:
    print(a)
except NameError as s:
    print(s)

再次运行看效果:

飘红的报错信息变得简短且颜色正常,看起来这个异常是不是显得舒服多了?

这里的tyr-except并不影响代码的运行,如果你的代码没有报错,你就算是写了tyr-except,它也只会执行try那行代码,那行代码没有错误,那就不会执行except里面的代码。

例如我们来一个正常的:

2.try-except-except

这种方法和前面的try-except写法是差不多的,只是后面再增加了一个except,可用于判断多种可能报错的情况。

例如:有两行代码可能会报错,两种不同类型的异常,但不想让它飘红。

try:
    1 / 0
    print(a)
except NameError as s:  # 第一种写法,用as+变量
    print(s)
except ZeroDivisionError:  # 第二种写法,自定义输出内容
    print("除数不能为0")  # 自定义输出的内容

运行结果:

虽然报错,但没有飘红,这里注意一下except的两种写法。

try-except的写法很灵活的,我们同样可以用元组把可能报错的异常类型囊括进去,避免写多行except,例如:


3.try-except-else

如果没有异常,则执行else里面的代码,例如:


4.try-except-finally

不管代码是否有异常,最后都会执行finally里面的代码。例如:

5.顶层类Exception

except后面其实可以不加错误类型,因为系统会默认认为后面的错误是类型是Exception,这是1个顶层类,包含了所有的出错类型。

三、自定义异常

有没有发现,前面我们去做基本的异常捕获时,每次可能出错的地方就得写一个try-except,如果有多个地方可能会出错呢?是否我们需要写多个try-except?又或者理论上代码可以运行,但我想定一下规矩,凡是不符合我规矩的行为,我都让它出现异常,比如密码长度超出我规定的长度,我想让程序出现异常。

自定义异常可用于引发一个异常(抛出一个异常),由关键字raise引发。

举例:模拟用户输入密码的情景,用户输入的密码不能低于6位数,自定义一个异常,用于检测用户输入的密码是否符合规定,不符合则引发异常,提示当前输入的密码长度和最小密码长度不能低于6位数。

class MyError(Exception):  # 异常捕获的类
    def __init__(self, length, min_len):  # length为用户输入的密码长度,min_len为规定的最小长度
        self.length = length
        self.min_len = min_len

    # 设置抛出异常的描述信息
    def __str__(self):
        return "你输入的长度是%s,不能少于%s" % (self.length, self.min_len)


def main():
    try:
        con = input("请输入密码:")  # 获取用户输入的密码
        l = len(con)  # 获取用户输入的密码长度
        if l < 6:
            raise MyError(l, 6)  # 长度低于设定的6位数则引发异常
    except Exception as ss:  # 有错误则提示
        print(ss)
    else:
        print("您的密码输入完毕")  # 没有错误则执行


main()

运行结果:

从上面的代码中我们又用到了之前面向对象板块里面的类和实例对象的知识,忘记地赶紧去复习吧,除此之外,这里还结合了前面的try-except,还有我们的关键字raise引起异常捕获。


结语

以上就是基本的异常捕获和处理的方法,可以结合更多所学知识对异常进行更灵活地捕获和优化,现在基本上很少能看到代码异常报错但却原封不动地呈现给用户看的产品,说明大家对异常的处理还是很重视的,所以这一块知识对于开发者来说也是必备的。

相关推荐

面试官:来,讲一下枚举类型在开发时中实际应用场景!

一.基本介绍枚举是JDK1.5新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如错...

一日一技:11个基本Python技巧和窍门

1.两个数字的交换.x,y=10,20print(x,y)x,y=y,xprint(x,y)输出:102020102.Python字符串取反a="Ge...

Python Enum 技巧,让代码更简洁、更安全、更易维护

如果你是一名Python开发人员,你很可能使用过enum.Enum来创建可读性和可维护性代码。今天发现一个强大的技巧,可以让Enum的境界更进一层,这个技巧不仅能提高可读性,还能以最小的代价增...

Python元组编程指导教程(python元组的概念)

1.元组基础概念1.1什么是元组元组(Tuple)是Python中一种不可变的序列类型,用于存储多个有序的元素。元组与列表(list)类似,但元组一旦创建就不能修改(不可变),这使得元组在某些场景...

你可能不知道的实用 Python 功能(python有哪些用)

1.超越文件处理的内容管理器大多数开发人员都熟悉使用with语句进行文件操作:withopen('file.txt','r')asfile:co...

Python 2至3.13新特性总结(python 3.10新特性)

以下是Python2到Python3.13的主要新特性总结,按版本分类整理:Python2到Python3的重大变化Python3是一个不向后兼容的版本,主要改进包括:pri...

Python中for循环访问索引值的方法

技术背景在Python编程中,我们经常需要在循环中访问元素的索引值。例如,在处理列表、元组等可迭代对象时,除了要获取元素本身,还需要知道元素的位置。Python提供了多种方式来实现这一需求,下面将详细...

Python enumerate核心应用解析:索引遍历的高效实践方案

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。根据GitHub代码分析统计,使用enumerate替代range(len())写法可减少38%的索引错误概率。本文通过12个生产...

Python入门到脱坑经典案例—列表去重

列表去重是Python编程中常见的操作,下面我将介绍多种实现列表去重的方法,从基础到进阶,帮助初学者全面掌握这一技能。方法一:使用集合(set)去重(最简单)pythondefremove_dupl...

Python枚举类工程实践:常量管理的标准化解决方案

本文通过7个生产案例,系统解析枚举类在工程实践中的应用,覆盖状态管理、配置选项、错误代码等场景,适用于Web服务开发、自动化测试及系统集成领域。一、基础概念与语法演进1.1传统常量与枚举类对比#传...

让Python枚举更强大!教你玩转Enum扩展

为什么你需要关注Enum?在日常开发中,你是否经常遇到这样的代码?ifstatus==1:print("开始处理")elifstatus==2:pri...

Python枚举(Enum)技巧,你值得了解

枚举(Enum)提供了更清晰、结构化的方式来定义常量。通过为枚举添加行为、自动分配值和存储额外数据,可以提升代码的可读性、可维护性,并与数据库结合使用时,使用字符串代替数字能简化调试和查询。Pytho...

78行Python代码帮你复现微信撤回消息!

来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。[导读]Python曾经对我说:"时日不多,赶紧用Python"。于是看...

登录人人都是产品经理即可获得以下权益

文章介绍如何利用Cursor自动开发Playwright网页自动化脚本,实现从选题、写文、生图的全流程自动化,并将其打包成API供工作流调用,提高工作效率。虽然我前面文章介绍了很多AI工作流,但它们...

Python常用小知识-第二弹(python常用方法总结)

一、Python中使用JsonPath提取字典中的值JsonPath是解析Json字符串用的,如果有一个多层嵌套的复杂字典,想要根据key和下标来批量提取value,这是比较困难的,使用jsonpat...

取消回复欢迎 发表评论: