python从入门到精通:异常操作、模块操作及包操作

2024-08-27 08:52

本文主要是介绍python从入门到精通:异常操作、模块操作及包操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、异常概念

2、异常的捕获方法

3、异常的传递 

4、python模块

4.1、模块的导入

4.2、自定义模块

5、python包

5.1、自定义python包

5.2、安装第三方包



1、异常概念

当检测到一个错误时,python解释器会无法执行,反而出现一些错误的提示,这就是所谓的“异常”,也就是BUG。

BUG就是异常的意思,因为历史上因为小虫子导致计算机失灵的案例,所以延续至今,bug就代表软件出现错误。

比如:打开一个不存在的文件

f=open("www.txt","r",encoding="utf-8")
# FileNotFoundError: [Errno 2] No such file or directory: 'www.txt'

2、异常的捕获方法

在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理的行为,称之为异常处理(捕获异常)

捕获异常的原因:

一、增强程序稳定性。避免程序因错误突然崩溃,如在线购物系统中可防止购物流程中断和数据丢失,采取适当措施使程序继续运行。
二、便于错误处理和调试。能获取异常详细信息,帮助开发者快速定位问题;还可根据不同异常类型进行特定处理。
三、提高程序可维护性。分离错误处理代码与业务逻辑代码,使程序结构更清晰;可在不同层次捕获异常,实现分层错误处理。

当我们的程序遇到了bug,会有两种情况:

1、整个程序因为一个BUG停止运行

2、对BUG进行提醒,整个程序继续运行 

在程序运行时,往往会因为一个BUG而停止运行,也就是程序崩溃。但是在实际工作中,我们肯定不能因为一个小的BUG就让整个程序崩溃,而是对BUG进行提醒,整个程序继续运行,这时候就要用到捕获异常。

捕获异常的作用:提前假设某处会出现异常,提前做好准备,当真的出现异常,会有后续手段。

捕获常规异常基本语法:

try:

        可能发生错误的代码

except:

        如果出现异常执行的代码 

需求:尝试以“r”模式打开文件,如果文件不存在,则以“w”方式打开

try:f=open("www.txt","r",encoding="utf-8")
except:f = open("www.txt", "w", encoding="utf-8")

 捕获指定异常基本语法:

try:

        print(name)

except NameError as e:

        print("name变量名称未定义错误")

# e指的是异常对象

注意事项:

1、如果尝试执行的代码的异常类型和要捕获的与异常类型不一致,则无法捕获异常。

2、一般try下方只放一行尝试执行的代码 

捕获多个异常:

当捕获多个异常时,可以把要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写。

try:

        print(1/0)

except (NameError,ZeroDivisionError):

        print("ZeroDivisionError")

捕获所有异常:

try:

        可能发生错误的异常代码

except Exception as e:

        如果出现异常执行的代码 

效果等同于常规异常捕获

异常else:else表示的是如果没有异常时执行的代码

 try:

        print(1)

except Exception as e:

        print(e)

else:

print("我是else,是没有异常时执行的代码")

# 异常else
try:print(1)
except Exception as e:print(e)
else:print("无异常")

 异常的finally:finally表示的是无论是否异常都要执行的代码。例如关闭文件

# 异常finally
try:f=open("test.txt","r",encoding="utf-8")
except Exception as e:print(e)f = open("test.txt", "w", encoding="utf-8")
else:print("无异常")
finally:f.close()

3、异常的传递 

def func1():print("函数1的开始")print(1/0)print("函数1的结束")
def func2():print("函数2的开始")func1()print("函数2的结束")
def main():try:func2()except Exception as e:print(e)
main()
# 函数2的开始
# 函数1的开始
# division by zero

异常是具有传递性的。当函数func1中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func2中,当func2也没有捕获处理这个异常的时候,main函数会捕获这个异常,这就是异常的传递性。

当所有函数都没有捕获异常的时候,程序就会报错。 

4、python模块

python模块(module),是一个python文件,以.py结尾。模块能定义函数,类和变量,模块也能包含可执行的代码。

模块的作用:python中有许多不同的模块,每一个模块都可以帮助我们快速的实现一些功能,比如实现和时间相关的功能就可以使用time模块,我们可以认为模块就是一个工具包,每一个工具包都有各种不同的工具供我们使用进而实现各种不同的功能

实际上模块就是一个python文件,里面有类、函数、变量等,导入模块以使用。

4.1、模块的导入

模块在使用前要先导入,导入语法:

[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]

常用的组合形式:

· import 模块名

· from 模块名 import 类、变量、方法等

· from 模块名 import *

· import 模块名 as 别名

· from 模块名 import 功能名 as 别名 

案例:导入time模块

#导入时间模块
import time
print("开始")
#让程序睡眠1s(阻塞)
time.sleep(1)
print("结束")
# from time import sleep
# print("开始")
# sleep(1)
# print("结束")
# 使用*导入time模块的全部功能
from time import *
sleep(1)

 as定义别名:

import 模块名 as别名

from 模块名 import 功能 as 别名

import time as t
t.sleep(2)
print("haha")
from time import sleep as sl
sl(2)
print("hehe")

4.2、自定义模块

python中已经帮我们实现了很多模块,不过有时候我们需要一些个性化的模块,这里就可以通过自定义模块实现,也就是自己制作模块。

案例:新建一个python文件,命名为my_module.py并定义test函数

注意:每个python文件都可以作为一个模块,模块的名字就是文件的名字,也就是说自定义模块必须要符合标识符命名规则。

# 模块1代码
def my_test(a,b):print(a+b)
# 模块2代码
def my_test(a,b):print(a-b)
# 导入模块并调用功能
from my_module1 import my_test
from my_module2 import my_test
# my_test函数是模块2中的函数
my_test(1,2)

当导入多个模块的时候,且模块内有同名功能,当调用这个同名功能的时候,调用到的是后面导入的模块的功能。 

测试模块:在实际开发中,当一个开发人员编写完一个模块后,为了模块能在项目中达到想要的效果,开发人员会自行在py文件中添加一些测试信息,例如,在my_module1.py中加入测试代码test(1,1)

def test(a,b):print(a+b)
if __name__ == '__main__':
# 只在当前文件中调用该函数,其他导入的文件不符合该条件,不执行test函数调用test(1,2)

如果一个模块文件中有“__all__”变量,当使用“from 模块名 import *”导入时,只能导入这个列表中的元素。

5、python包

从物理上看,包就是一个文件夹,在该文件夹下包含了一个__init__.py文件,该文件夹可用于包含多个模块文件。从逻辑上看,包的本质依然是模块。

包的作用:当我们的模块文件越来越多时,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但本质依然是模块。

5.1、自定义python包

步骤:

1、新建包“my_package”

2、新建包内模块:“my_module1”和“my_module2”

2、模块内代码如下

注意:新建包后,包内部会自动创建“__init__.py”文件,这个文件控制着包的导入行为。

使用方式1:

import 包名.模块名

包名.模块名.目标

使用方式2:

from 包名 import *

模块名.目标 

注意:必须在“__init__.py”文件中添加“__all_=[ ]”,控制允许导入的模块列表

5.2、安装第三方包

我们知道,可以包含一堆的python模块,而每个模块又包含许多的功能。所以,我们可以认为:一个包,就是一堆同类型功能的集合体。

在python程序的生态中,有许多非常多的第三方包(非python官方),可以极大的帮助我们提高开发效率,如:

· 科学计算常用的:numpy

· 数据分析中常用的:pandas

· 大数据计算中常用的:pyspark、apache-flink包

· 图形可视化常用的:matplotlib、pyecharts包

· 人工智能常用的:tensortflow

等等

这些第三方的包,极大的丰富python的生态,提高了开发效率。但是由于是第三方,所以python没有内置,所以手动安装才可导入使用。

第三方包的安装非常简单,我们只需要使用非python内置的pip程序即可。通过alt+F12打开本地终端,输入指令:

pip install 第三方包名称 

 但是因为pip默认链接的是国外网站,所以下载速度很慢,只需要加上以下命令,使其连接国内的网站;

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称

创建一个自定义包,名称为:my_utils(我的工具)在包内提供2个模块
• str_util.py(字符串相关工具,内含:)
•函数:str_reverse(s),接受传入字符串,将字符串反转返回
• 函数:substr (s,x,y),按照下标x和y,对字符串进行切片
• file_util.py(文件处理相关工具,内含:)
• 函数:Print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
• 函数:append_to_file(file_name, data),接收文件路径以及传入数据,将数据追加写入到文件中

# 模块str_util.py
def str_reverse(s):s =s[::-1]return s
def substr(s,x,y):index_x=s.index(x)index_y=s.index(y)s = s[index_x:index_y]print(s)
if __name__ == '__main__':substr("itheima","t","m")
# 模块file_util.py
def print_file_info(file_name):f=Nonetry:f=open(file_name,'r')content=f.read()print(content)except Exception as e:print(e)else:if f:f.close()
def append_file_info(file_name,data):f=open(file_name,'a')f.write(data)f.write("\n")f.close()

这篇关于python从入门到精通:异常操作、模块操作及包操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111204

相关文章

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3