python 异常的捕捉与包
后台-插件-广告管理-内容页头部广告(手机) |
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 1.异常的捕捉方法
- 1.1 了解异常
- 1.2 捕捉异常
- 1.2.1简单捕捉异常:
- 1.2.2 指定和多个异常的捕捉
- 1.2.3 异常的传递性
- 1.2.4 了解Error
- 2、模块和包
- 2.1模块的导入和使用
- 2.2 python包的定义
- 2.3 第三方包
- 总结
前言
为了更深入的学习python,了解异常和包的内容:
简单的说异常就是bug,包就是多个模块(.py的文件)和一个__inti__.py。此篇文章为大家做出总结。
提示:以下是本篇文章正文内容,下面案例可供参考
1.异常的捕捉方法
1.1 了解异常
什么是异常?异常就是错误(error),在运行一些程序的时候,会出现不可执行的错误,所谓的“异常”就是我们通常讲的bug.例如:
1.2 捕捉异常
有了异常,我们就要去处理这些异常,这个处理行为我们称之为:异常处理(捕捉异常)
基本的语法格式
#如果try下的代码没有异常,将会顺利输出,则不会再看except下的代码 try: 可能发生错误的代码 except: 如果出现异常执行的代码- 1
- 2
- 3
- 4
- 5
1.2.1简单捕捉异常:
例如标识符的未定义:
try: print(name) except: #最终输入的是except下面这条语句,原因是出现了NameError print("这个name标识符未定义")- 1
- 2
- 3
- 4
- 5
1.2.2 指定和多个异常的捕捉
指定异常的捕捉
try: print(name) except NameError as e: #这个e就是具体捕捉NameError(标识符未定义)的结果 print("name的变量名称未定义")- 1
- 2
- 3
- 4
- 5
多个异常的捕捉:
#除0的错误 try: print(1/0) except (NameError,ZeroDivisionError) as e: #以元组的形式 print(e)#输入的是ZeroDivisionError- 1
- 2
- 3
- 4
- 5
- 6
捕捉所有异常
try: print(name) except Exception as e: #其中Exception包括了所有异常 print(e) #最终输入相应的异常- 1
- 2
- 3
- 4
else和finally
-
如果try下的代码没有异常,则输出try和else下的内容
-
论try下的内容是否异常,都要输出finally下的内容
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
1.2.3 异常的传递性
异常是具有传递性的,例如在函数的使用的时候
# 定义一个出现异常的方法 def func1(): print("func1 开始执行") num = 1 / 0 # 肯定有异常,除以0的异常 print("func1 结束执行") # 定义一个无异常的方法,调用上面的方法 def func2(): print("func2 开始执行") func1() print("func2 结束执行") # 定义一个方法,调用上面的方法 def main(): try: func2() except Exception as e: print(f"出现异常了,异常的信息是:{e}") main()- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
函数func1()的除0异常会传递给func2(),最后再main()中检查出异常
1.2.4 了解Error
简单了解一些这几种错误:
错误类型 | 功能 |
---|---|
SyntaxError | 语法错误,当源代码违反了Python的语法规则时抛出 |
IndentationError | 缩进错误,通常是因为代码块的缩进不正确导致的 |
TypeError | 类型错误,当操作或函数应用于不适当类型的对象时发生,如将字符串与整数相加 |
ValueError | 值错误,当一个操作或函数接收到了合理类型但不适合其预期用途的参数时触发 |
ZeroDivisionError | 零除错误,尝试除以零时产生的异常 |
OSError | 操作系统错误,涵盖了与操作系统交互时发生的各种错误,包括文件找不到、权限错误等 |
FileNotFoundError | 找不到文件错误,试图打开不存在的文件时抛出 |
KeyError | 键错误,字典中查找不存在的键时引发 |
2、模块和包
2.1模块的导入和使用
首先,先了解一下python中的模块:
2.1.1 创建模块
Python 模块(Module),是一个Python 文件,以 .py 结尾.
作用:
在Python中,模块主要有以下几个重要作用:
-
代码复用:
模块允许将相关联的代码组织在一起,成为一个独立的功能单元。这样,在不同的地方或者项目中,只需要导入相应的模块,就可以重复使用其中的函数、类或其他定义,避免了代码冗余。 -
逻辑组织:
模块有助于按照逻辑来划分程序结构,使得大型项目变得易于管理。每个模块可以专注于一个特定的子任务或主题,使得代码更加清晰和模块化。 -
命名空间管理:
模块创建了一个单独的命名空间,即模块内的变量和函数名不会与全局或者其他模块中的同名实体冲突。这有助于防止名称冲突,并提高了代码的可读性和可维护性。 -
减少耦合度:
通过模块间的接口(通常是公开函数和类)进行交互,而不是直接访问模块内部实现细节,降低了不同部分之间的耦合度,增强了软件设计的灵活性。 -
提高可测试性:
将代码划分为小块(模块)后,可以独立测试每个模块的功能,从而简化测试过程,提高测试覆盖率。 -
资源共享:
标准库和第三方库都以模块的形式存在,开发者可以直接利用这些模块所提供的功能,而无需从头开始编写,极大地提升了开发效率。 -
封装和数据隐藏:
模块可以封装实现细节,对外只暴露必要的API,隐藏复杂的内部逻辑,遵循“高内聚、低耦合”的原则。
例如,Python的标准库就包含了许多模块,如os、sys、math、datetime等,每个模块都提供了一组特定功能的操作,用户可以根据需要导入并使用。同样,开发人员也可以自行编写模块供项目内部或外部共享使用。
2.1.2 模块的导入
模块的导入语法:
[from 模块名] import [模块 | 类 | 变量 | 函数 | * ] [as 别名] 例如: (1)import 模块名,模块名 (2)from 模块名 import 功能名 (3)from 模块名 import * #导入模块中全部的功能 (4)import 模块名 as 别名 (5)from 模块名 import 功能名 as 别名- 1
- 2
- 3
- 4
- 5
- 6
- 7
2.1.3 自定义模块
在自定义调用本模块时,main是在本模块下测试函数时使用的内容,例如:
def text() print("你好") #在其他模块调用本模块时,if一下的内容不会被执行 if __name__ == "__main__": text()- 1
- 2
- 3
- 4
- 5
在模块中指定可以使用的函数
以列表的形式表达 __all__=[函数名]- 1
- 2
2.2 python包的定义
从物理上看,包就是一个文件夹,在ptyhon中,包中包括了一个__init__.py文件和多个模块(.py)
包的作用:当我们模块越来越多时,可以利用包来管理这些模块,包的本质其实也是模块
创建包:
已经创建好的包
包的导入
(1)import 包名.模块名 (2) from 包名 import * (*是导入包中所有的模块) (3) 使用: 模块名.功能 包名.模块名.功能- 1
- 2
- 3
- 4
- 5
在包中__init__.py是管理所有包的模块,
使用指定模块,以列表的形式 __all__=[模块名]- 1
- 2
2.3 第三方包
第三方包也就是:非Python官方的包
例如一些常用的:
在Python中,有许多常用的包,这里列出一些广泛应用于数据分析、机器学习、Web开发、网络编程、图形界面设计等多个领域的核心包:
1 数据分析与科学计算:
- NumPy: 提供了高效多维数组对象和丰富的数学函数库,是数值计算的基础。
- Pandas: 提供DataFrame对象,用于高效的数据清洗、转换、分析和操作,常用于数据预处理阶段。
- Matplotlib: 数据可视化库,用于绘制静态、动态、交互式的图表和图形。
- SciPy: 科学计算库,包含了众多数学算法和函数,如线性代数、优化、插值、统计等。
- Scikit-learn: 机器学习库,实现了大量监督和无监督学习算法,包括分类、回归、聚类等。
2 Web开发:
- Django: 高级的Web框架,用于快速开发安全和可维护的网站。
- Flask: 轻量级Web服务框架,适合小型应用和服务。
- FastAPI: 高性能的现代Web框架,基于Python 3.6+的Type Hinting特性,用于构建RESTful APIs。
3 网络请求与爬虫:
- requests: HTTP请求库,简洁易用,用于发送HTTP请求。
- BeautifulSoup: HTML和XML解析库,常用于网页抓取和解析。
- Scrapy: 强大的爬虫框架,用于编写爬虫程序。
4 数据库操作:
- sqlite3: Python内置的SQLite数据库连接器。
- pymysql 或 psycopg2: MySQL和PostgreSQL数据库适配器。
- sqlalchemy: SQL工具包和ORM框架,提供数据库抽象层。
5 日志处理:
- logging: Python标准库中的日志记录模块,用于生成和处理程序运行过程中的日志。
6 并发和异步:
- asyncio: Python标准库中的异步I/O框架,支持协程编程。
- concurrent.futures: 提供了Future和ThreadPoolExecutor/ProcessPoolExecutor,用于并发执行任务。
7 日期与时间处理:
- datetime: Python标准库中的日期和时间处理模块。
- pendulum: 第三方库,提供了更强大、易用的日期时间处理功能。
8 GUI开发:
- Tkinter: Python标准库中的GUI工具包。
- PyQt: 基于Qt库的GUI框架。
- wxPython: 另一款流行的GUI工具包。
9 分布式计算与任务调度:
- Celery: 分布式任务队列,用于异步任务处理和调度。
10 容器化与部署:
- docker: 用于构建、部署和运行应用程序的开源平台,虽然不是Python库,但Python项目常常与之结合使用。
下载第三方包:
- 可以在终端下载:
- 1
例如:
- 可以在pycharm中下载:
总结
刚来csdn的时候只是为了查找资料,没有想过去写一些内容。然而在兄长的建议下,通过尝试写了一些内容,其中学习过程中也有期待自己的文章好不好,发出去后文章的效果怎么样。在发出第一个作品时,有了一个又一个的小粉丝,这种感觉怎么说呢,是欣喜,也是担忧,感觉有很多不足之处。在想未来时,感觉迷茫;在想现在时,感觉得活在当下。所以觉得有时候想想,多尝试分享自己的知识也是一种快乐。
通过不断的精进自己,分享出一期python中的一小节内容,在写这篇文章的时候,参考了很多网上资料,并作出总结,可能有些内容不是很完善,欢迎csdn的小伙伴来评论区讨论。
Everything will be fine!
加油!
参考:黑马程序员python教程
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |