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

python异常,你知道该怎么解决吗?

off999 2024-11-19 08:33 25 浏览 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 Flask 容器化应用链路可观测

简介Flask是一个基于Python的轻量级Web应用框架,因其简洁灵活而被称为“微框架”。它提供了Web开发所需的核心功能,如请求处理、路由管理等,但不会强制开发者使用特定的工具或库。...

Python GUI应用开发快速入门(python开发软件教程)

一、GUI开发基础1.主流GUI框架对比表1PythonGUI框架比较框架特点适用场景学习曲线Tkinter内置库,简单小型应用,快速原型平缓PyQt功能强大,商用许可专业级桌面应用陡峭PySi...

【MCP实战】Python构建MCP应用全攻略:从入门到实战!

实战揭秘:Python Toga 打造跨平台 GUI 应用的神奇之旅

在Python的世界里,GUI(图形用户界面)开发工具众多,但要找到一款真正跨平台、易于使用且功能强大的工具并不容易。今天,我们就来深入探讨一下Toga——一款Python原生、操作系统原...

python应用目录规划(python的目录)

Python大型应用目录结构规划(企业级最佳实践)核心原则模块化:按业务功能拆分,高内聚低耦合可扩展性:支持插件机制和动态加载环境隔离:清晰区分开发/测试/生产环境自动化:内置标准化的构建测试部署流...

Python图形化应用开发框架:PyQt开发简介

PyQt概述定义:PyQt是Python绑定Qt框架的工具集,用于开发跨平台GUI应用程序原理:通过Qt的C++库提供底层功能,PyQt使用SIP工具生成Python绑定特点:支持Windows/ma...

[python] 基于PyOD库实现数据异常检测

PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点。异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误、噪声或潜在的有趣现象。无论是处理小规模项目还是大型...

Python、Selenium 和 Allure 进行 UI 自动化测试的简单示例脚本

环境准备确保你已经安装了以下库:SeleniumAllurepytest你可以使用以下命令安装所需库:pipinstallseleniumallure-pytestpytest示例代码下面的代...

LabVIEW 与 Python 融合:打造强大测试系统的利器

在现代测试系统开发领域,LabVIEW和Python各自凭借独特优势占据重要地位。LabVIEW以图形化编程、仪器控制和实时系统开发能力见长;Python则凭借丰富的库资源、简洁语法和强大数...

软件测试进阶之自动化测试——python+appium实例

扼要:1、了解python+appium进行APP的自动化测试实例;2、能根据实例进行实训操作;本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Androi...

Python openpyxl:读写样式Excel一条龙,测试报表必备!

无论你是测试工程师、数据分析师,还是想批量导出Excel的自动化工作者,只需一个库openpyxl,即可高效搞定Excel的各种需求!为什么选择openpyxl?支持.xlsx格式...

Python + Pytest 测试框架——数据驱动

引言前面已经和大家介绍过Unittest测试框架的数据驱动框架DDT,以及其实现原理。今天和大家分享的是Pytest测试框架的数据驱动,Pytest测试框架的数据驱动是由pytest自...

这款开源测试神器,圆了我玩游戏不用动手的梦想

作者:HelloGitHub-Anthony一天我在公司用手机看游戏直播,同事问我在玩什么游戏?我和他说在看直播,他恍然大悟:原来如此,我还纳闷你玩游戏,咋不用动手呢。。。。一语惊醒梦中人:玩游戏不用...

Python单元测试框架对比(pycharm 单元测试)

一、核心框架对比特性unittest(标准库)pytest(主流第三方)nose2(unittest扩展)doctest(文档测试)安装Python标准库pipinstallpytestp...

利用机器学习,进行人体33个2D姿态检测与评估

前几期的文章,我们分享了人脸468点检测与人手28点检测的代码实现过程,本期我们进行人体姿态的检测与评估通过视频进行人体姿势估计在各种应用中起着至关重要的作用,例如量化体育锻炼,手语识别和全身手势控制...

取消回复欢迎 发表评论: