Python异常捕获和处理,代码异常报错也能那么和谐且个性
off999 2024-11-19 08:33 26 浏览 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引起异常捕获。
结语
以上就是基本的异常捕获和处理的方法,可以结合更多所学知识对异常进行更灵活地捕获和优化,现在基本上很少能看到代码异常报错但却原封不动地呈现给用户看的产品,说明大家对异常的处理还是很重视的,所以这一块知识对于开发者来说也是必备的。
相关推荐
- PYTHON-简易计算器的元素介绍
-
[烟花]了解模板代码的组成importPySimpleGUIassg#1)导入库layout=[[],[],[]]#2)定义布局,确定行数window=sg.Window(...
- 如何使用Python编写一个简单的计算器程序
-
Python是一种简单易学的编程语言,非常适合初学者入门。本文将教您如何使用Python编写一个简单易用的计算器程序,帮助您快速进行基本的数学运算。无需任何高深的数学知识,只需跟随本文的步骤,即可轻松...
- 用Python打造一个简洁美观的桌面计算器
-
最近在学习PythonGUI编程,顺手用Tkinter实现了一个简易桌面计算器,功能虽然不复杂,但非常适合新手练手。如果你正在学习Python,不妨一起来看看这个项目吧!项目背景Tkint...
- 用Python制作一个带图形界面的计算器
-
大家好,今天我要带大家使用Python制作一个具有图形界面的计算器应用程序。这个项目不仅可以帮助你巩固Python编程基础,还可以让你初步体验图形化编程的乐趣。我们将使用Python的tkinter库...
- 用python怎么做最简单的桌面计算器
-
有网友问,用python怎么做一个最简单的桌面计算器。如果只强调简单,在本机运行,不考虑安全性和容错等的话,你能想到的最简单的方案是什么呢?我觉得用tkinter加eval就够简单的。现在开整。首先创...
- 说好的《Think Python 2e》更新呢!
-
编程派微信号:codingpy本周三脱更了,不过发现好多朋友在那天去访问《ThinkPython2e》的在线版,感觉有点对不住呢(实在是没抽出时间来更新)。不过还好本周六的更新可以实现,要不就放一...
- 构建AI系统(三):使用Python设置您的第一个MCP服务器
-
是时候动手实践了!在这一部分中,我们将设置开发环境并创建我们的第一个MCP服务器。如果您从未编写过代码,也不用担心-我们将一步一步来。我们要构建什么还记得第1部分中Maria的咖啡馆吗?我们正在创...
- 函数还是类?90%程序员都踩过的Python认知误区
-
那个深夜,你在调试代码,一行行检查变量类型。突然,一个TypeError错误蹦出来,你盯着那句"strobjectisnotcallable",咖啡杯在桌上留下了一圈深色...
- 《Think Python 2e》中译版更新啦!
-
【回复“python”,送你十本电子书】又到了周三,一周快过去一半了。小编按计划更新《ThinkPython2e》最新版中译。今天更新的是第五章:条件和递归。具体内容请点击阅读原文查看。其他章节的...
- Python mysql批量更新数据(兼容动态数据库字段、表名)
-
一、应用场景上篇文章我们学会了在pymysql事务中批量插入数据的复用代码,既然有了批量插入,那批量更新和批量删除的操作也少不了。二、解决思路为了解决批量删除和批量更新的问题,提出如下思路:所有更新语...
- Python Pandas 库:解锁 combine、update 和compare函数的强大功能
-
在Python的数据处理领域,Pandas库提供了丰富且实用的函数,帮助我们高效地处理和分析数据。今天,咱们就来深入探索Pandas库中四个功能独特的函数:combine、combine_fi...
- 记录Python3.7.4更新到Python.3.7.8
-
Python官网Python安装包下载下载文件名称运行后选择升级选项等待安装安装完毕打开IDLE使用Python...
- Python千叶网原图爬虫:界面化升级实践
-
该工具以Python爬虫技术为核心,实现千叶网原图的精准抓取,突破缩略图限制,直达高清资源。新增图形化界面(GUI)后,操作门槛大幅降低:-界面集成URL输入、存储路径选择、线程设置等核心功能,...
- __future__模块:Python语言版本演进的桥梁
-
摘要Python作为一门持续演进的编程语言,在版本迭代过程中不可避免地引入了破坏性变更。__future__模块作为Python兼容性管理的核心机制,为开发者提供了在旧版本中体验新特性的能力。本文深入...
- Python 集合隐藏技能:add 与 update 的致命区别,90% 开发者都踩过坑
-
add函数的使用场景及错误注意添加单一元素:正确示例:pythons={1,2}s.add(3)print(s)#{1,2,3}错误场景:试图添加可变对象(如列表)会报错(Pytho...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)