Python(9)-- 异常模块与包

1. 了解异常

**异常:**就是程序运行的过程中出现了错误

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

2. 异常的捕获方法

**异常处理:**在可能发生异常的地方,进行捕获。当异常出现的时候,提供解决方式,而不是任由其导致程序无法运行。

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

2.1 捕获异常语法:

2.2 捕获指定异常:

注意:

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

② 一般try下方只放一行尝试执行的代码。

2.3 捕获多个异常

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

2.4 捕获异常并输出描述信息

2.5 异常else

else表示的是如果没有异常要执行的代码。

2.6 异常的finally

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

2.7 捕获所有信息

3. 异常的传递

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

注:利用异常具有传递性 的特点, 当我们想要保证程序不会因为异常崩溃的时候, 就可以在main函数中设置异常捕获, 由于无论在整个程序哪里发生异常, 最终都 会传递到main函数中, 这样就可以确保所有的异常都会被捕获

4. Python模块

4.1 模块的导入

**模块:**就是一个Python代码文件,内含类、函数、变量等,我们可以导入进行使用。

模块导入的语法如下:

常用的组合形式如:

  • import 模块名
  • from 模块名 import 类、变量、方法等
  • from 模块名 import *
  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名

注意:

from可以省略,直接import即可

as别名可以省略

通过"."来确定层级关系

模块的导入一般写在代码文件的开头位置

4.2 自定义模块

自定义模块名必须要符合标识符命名规则

**自定义模块并导入:**在Python代码文件中正常写代码即可,通过import、from关键字和导入Python内置模块一样导入即可使用。

if main == "main"表示,只有当程序是直接执行的才会进入if内部,如果是被导入的,则if无法进入

注意:

不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的

__all__变量可以控制import *的时候哪些功能可以被导入

5. Python包

5.1 自定义包:

从物理上看,包就是一个文件夹,在该文件夹下包含了一个 init.py 文件,该文件夹可用于包含多个模块文件

从逻辑上看 ,包的本质依然是模块

**init.py文件:**创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是Python的包,而非普通的文件夹。

__all__变量的作用: 同模块中学习到的是一个作用,控制 import * 能够导入的内容

导入包:

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

5.2 安装第三方包:

  • 科学计算中常用的:numpy包
  • 数据分析中常用的:pandas包
  • 大数据计算中常用的:pyspark、apache-flink包
  • 图形可视化常用的:matplotlib、pyecharts
  • 人工智能常用的:tensorflow

pip install 包名称

pip install -i

https://pypi.tuna.tsinghua.edu.cn/simple 包名称

6. 综合案例

创建一个自定义包,名称为:my_utils (我的工具)

在包内提供2个模块 s

tr_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):
    """
    将字符串反转返回
    :param s: 要反转的字符串
    :return: 反转后的字符串
    """
    return s[::-1]

def substr(s, x, y):
    """
    按照下标x和y对字符串切片
    :param s: 原始字符串
    :param x: 起始索引
    :param y: 结束索引
    :return: 切片后的字符串
    """
    return s[x:y]
file_util.py:
复制代码
def print_file_info(file_name):
    """
    打印文件内容
    :param file_name: 文件路径
    """
    f = None
    try:
        f = open(file_name, 'r', encoding='utf-8')
        content = f.read()
        print("文件内容:")
        print(content)
    except Exception as e:
        print(f"文件不存在或读取错误:{e}")
    finally:
        if f:  # 如果文件对象存在
            f.close()

def append_to_file(file_name, data):
    """
    追加数据到文件
    :param file_name: 文件路径
    :param data: 要追加的数据
    """
    with open(file_name, 'a', encoding='utf-8') as f:
        f.write(data)
        print("数据追加成功!")
__init__.py
复制代码
from .str_util import str_reverse, substr
from .file_util import print_file_info, append_to_file

__all__ = ['str_reverse', 'substr', 'print_file_info', 'append_to_file']

main

复制代码
from my_utils import str_util, file_util

# 测试字符串工具
print("字符串反转:", str_util.str_reverse("Python"))
print("字符串切片:", str_util.substr("Hello World", 2, 7))

# 测试文件工具
file_util.print_file_info("test.txt")  # 测试不存在的文件
file_util.append_to_file("test.txt", "这是追加的内容\n")
file_util.print_file_info("test.txt")  # 测试存在的文件
相关推荐
歪歪10010 分钟前
Vue原理与高级开发技巧详解
开发语言·前端·javascript·vue.js·前端框架·集成学习
紫金修道14 分钟前
python安装部署rknn-toolkit2(ModuleNotFoundError: No module named ‘rknn_toolkit2‘)
开发语言·python
EndingCoder1 小时前
Next.js API 路由:构建后端端点
开发语言·前端·javascript·ecmascript·全栈·next.js·api路由
2401_858286112 小时前
CD64.【C++ Dev】多态(3): 反汇编剖析单继承下的虚函数表
开发语言·c++·算法·继承·面向对象·虚函数·反汇编
何以问天涯2 小时前
K210人脸识别系统
人工智能·python·嵌入式硬件·ai编程
Juchecar2 小时前
TypeScript 中字符串与数值、日期时间的相互转换
javascript·python
pzzqq2 小时前
buildroot编译qt 5.9.8 arm64版本踩坑
开发语言·qt
还是大剑师兰特2 小时前
Python面试题及详细答案150道(41-55) -- 面向对象编程篇
python·大剑师·python面试题
还债大湿兄2 小时前
基于Qt Property Browser的通用属性系统:Any类与向量/颜色属性的完美结合
开发语言·qt
Juchecar2 小时前
在TypeScript中如何实现Python中常用的dict类型及操作
javascript·python