python异常,你知道该怎么解决吗?
off999 2024-11-19 08:33 20 浏览 0 评论
1.初识异常
1.1.什么是异常与异常处理
- 异常就是错误
- 异常会导致程序崩溃并停止运行
- 能监控并捕获异常,将异常部位的程序进行修理使得程序继续正常运行
1.2.异常的语法
1 # coding:utf-8
2
3 def upper(str_data):
4 new_str='None'
5 try:
6 new_str=str_data.upper()
7 except:
8 print('程序出错了')
9 return new_str
10
11 result=upper(123)
12 print(result)
13 '''
14 程序出错了
15 None
16 '''
1.3.捕获通用异常
1 # coding:utf-8
2
3 def upper(str_data):
4 new_str='None'
5 try:
6 new_str=str_data.upper()
7 except Exception as e:
8 print('程序出错了:{}'.format(e))
9 return new_str
10
11 result=upper(123)
12 print(result)
13 '''
14 程序出错了:'int' object has no attribute 'upper'
15 None
16 '''
1.4.捕获具体异常
1 # coding:utf-8
2
3 def test():
4 try:
5 print("try start")
6 1/0
7 print("try finish") #这句代码不会执行,因为1/0已经报错了,直接进入到exception中了
8 except ZeroDivisionError as e:
9 print(e)
10 test()
11 '''
12 try start
13 division by zero
14 '''
1 # coding:utf-8
2
3 def test():
4 try:
5 print("try start")
6 print(name)
7 print("try finish")
8 except ZeroDivisionError as e: #except捕获的异常要与实际发生的异常一致,才能捕获到,不然没有用;捕获的是1/0的报错,实际发生的错误是name变量未定义
9 print(e)
10 test()
11 '''
12 Traceback (most recent call last):
13 File "D:/WorkSpace/Python_Study/test01.py", line 10, in <module>
14 test()
15 File "D:/WorkSpace/Python_Study/test01.py", line 6, in test
16 print(name)
17 NameError: name 'name' is not defined
18 try start
19 '''
1.5.捕获多个异常
2.python内置异常函数
异常类型集合 | |
异常名称 | 说明 |
Exception | 通用异常类型(基类) |
ZeroDivisionError | 不能整除0 |
AttributeError | 对象没有这个属性 |
IOError | 输入输出操作失败 |
IndexError | 没有当前的索引 |
KeyError | 没有这个键值(key) |
NameError | 没有这个变量(未初始化对象) |
SyntaxError | Python语法错误 |
SystemError | 解释器的系统错误 |
VauleError | 传入的参数错误 |
3.异常中的finally
finally的功能:
- 无论是否发生异常,一定会执行的代码块
- 在函数中,即便在try或except中进行了return也依然会执行finally语法快
- try语法至少要伴随except或finally中的一个
- 语法:try: <> except: <> finally: <> View Code
1 # coding:utf-8
2
3 def test():
4 try:
5 return "try"
6 except:
7 return "except"
8 finally:
9 return "finally"
10
11 print(test()) #finally
4.自定义异常
4.1.自定义抛出异常raise
raise:将信息以报错的形式抛出
1 # coding:utf-8
2
3 def test(number):
4 if number==100:
5 raise ValueError("number不能等于100")
6 return number
7 print(test(50)) #50
8 print(test(100))
9 '''
10 Traceback (most recent call last):
11 File "D:/WorkSpace/Python_Study/test01.py", line 8, in <module>
12 print(test(100))
13 File "D:/WorkSpace/Python_Study/test01.py", line 5, in test
14 raise ValueError("number不能等于100")
15 ValueError: number不能等于100
16 '''
1 # coding:utf-8
2
3 # 知识点1:raise主动抛出的异常可以被正常捕获
4 def test(number):
5 if number==100:
6 raise ValueError("number不能等于100")
7 return number
8
9 def test1(number):
10 try:
11 return test(number)
12 except ValueError as e:
13 return e
14
15 print(test1(100)) #number不能等于100
1 # coding:utf-8
2
3 # 知识点2:raise语法后面没有进行异常类型的传递,直接跟字符串,编译器报错,必须得加,如果不知道异常类型,使用基类Exception
4 def test():
5 raise "报错了"
6
7 print(test())
8 '''
9 Traceback (most recent call last):
10 File "D:/WorkSpace/Python_Study/test01.py", line 7, in <module>
11 print(test())
12 File "D:/WorkSpace/Python_Study/test01.py", line 5, in test
13 raise "报错了"
14 TypeError: exceptions must derive from BaseException
15 '''
4.2.自定义异常类
1 # coding:utf-8
2
3 class NumberLimitError(Exception):
4 def __init__(self,message):
5 self.message = message
6
7 class NameLimitError(Exception):
8 def __init__(self,message):
9 self.message = message
10
11 def test(name):
12 if name=="张三":
13 raise NameLimitError("张三不可以被填写")
14 return name
15
16 def test1(number):
17 if number > 100:
18 raise NumberLimitError("数字不能大于100")
19 return number
20
21 try:
22 test("张三")
23 except NameLimitError as e:
24 print(e)
25 '''
26 张三不可以被填写
27 '''
28
29 try:
30 test1(105)
31 except NumberLimitError as e:
32 print(e)
33 '''
34 数字不能大于100
35 '''
5.断言
5.1.断言的功能---assert
assert断言:用于判断一个表达式,在表达式条件为false时触发异常
- raise是生硬的抛出异常
- assert是先进行判断然后根据结果决定是否抛出
5.2.断言得用法---assert
1 # coding:utf-8
2
3 def test(name):
4 assert name in ["张三","李四"],"{}不在学生列表中".format(name)
5 print("{}在学生列表中".format(name))
6 test("张三") #张三在学生列表中
7 test("王五")
8 '''
9 Traceback (most recent call last):
10 File "D:/WorkSpace/Python_Study/test01.py", line 7, in <module>
11 test("王五")
12 File "D:/WorkSpace/Python_Study/test01.py", line 4, in test
13 assert name in ["张三","李四"],"{}不在学生列表中".format(name)
14 AssertionError: 王五不在学生列表中
15 '''
6.python中的调试方法
百度上面的方法一大堆,这里我就不多赘述了。
- 上一篇:Python基础-异常
- 下一篇:Python之异常:了解常见的内置异常,遇到不慌
相关推荐
- 面试官:来,讲一下枚举类型在开发时中实际应用场景!
-
一.基本介绍枚举是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...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python人脸识别 (54)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)