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

相关文章

Java Lettuce 客户端入门到生产的实现步骤

《JavaLettuce客户端入门到生产的实现步骤》本文主要介绍了JavaLettuce客户端入门到生产的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录1 安装依赖MavenGradle2 最小化连接示例3 核心特性速览4 生产环境配置建议5 常见问题

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码