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

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中的调试方法

百度上面的方法一大堆,这里我就不多赘述了。

相关推荐

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

一.基本介绍枚举是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...

取消回复欢迎 发表评论: