python入门到精通 _7异常、模块与包

发布于:2022-11-13 ⋅ 阅读:(422) ⋅ 点赞:(0)

1. 异常捕获

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

世界上没有完美的程序,任何程序在运行的过程中,都有可能出现:异常,也就是出现bug
导致程序无法完美运行下去。

我们要做的,不是力求程序完美运行。
而是在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。

这种行为我们称之为:异常处理(捕获异常)

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

1.1 捕获常规异常

基本语法:

try:
    可能发生错误的代码
except:
    如果出现异常执行的代码

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

try:
    f = open('linux.txt', 'r')
except:
    f = open('linux.txt', 'w')

1.2 捕获指定异常

基本语法:

try:
    print(name)
except NameError as e:
    print('name变量名称未定义错误')
    print(e)

① 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
② 一般try下方只放一行尝试执行的代码。

在这里插入图片描述

1.3 捕获多个异常

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

try:
    print(name)
except Exception as e:
    print(e)

1.4 异常的finally

try:
    f = open('test.txt', 'r')
except Exception as e:
    f = open('test.txt', 'w')
else:
    print('没有异常')
finally:
    f.close()

2. 模块的导入与自定义

2.1 模块的导入

模块就是一个Python文件,里面有类、函数、变量等,我们可以
拿过来用(导入模块去使用)

基本语法:

from 模块名 import 模块名 as 名字
模块名.功能名()

常用的组合形式如:
import 模块名
from 模块名 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名

案例:导入time模块

# 导入时间模块
import time
print("开始")
# 让程序睡眠1秒(阻塞)
time.sleep(1)
print("结束")

注意事项: from可以省略,直接import即可 as别名可以省略 通过”.”来确定层级关系 模块的导入一般写在代码文件的开头位置

2.2 模块的自定义

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

建立mk模块:

def test(a, b):
    print(a + b)

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

导入模块并使用:

from mk import test
test(1, 2)

注意事项:当导入多个模块的时候,且模块内有同名功能. 当调用这个同名功能的时候,调用到的是后面导入的模块的功能

3. 安装第三方包与自定义

3.1 自定义包

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

步骤如下:

① 新建包my_package
② 新建包内模块:my_module1my_module2

在这里插入图片描述

导入包:

import 包名.模块名

包名.模块名.目标

eg
在这里插入图片描述

3.2 安装第三方包

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

在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:
科学计算中常用的:numpy包
数据分析中常用的:pandas包
大数据计算中常用的:pyspark、apache-flink包
图形可视化常用的:matplotlib、pyecharts
人工智能常用的:tensorflow等
这些第三方的包,极大的丰富了Python的生态,提高了开发效率。
但是由于是第三方,所以Python没有内置,所以我们需要安装它们才可以导入使用.

3.2.1 cmd命令行pip命令

# 我们可以通过如下命令,让其连接国内的网站进行包的安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称

https://pypi.tuna.tsinghua.edu.cn/simple 是清华大学提供的一个网站,可供pip程序下载第三方包

3.2.2 pycharm导入

在这里插入图片描述

练习案例:自定义工具包

创建一个自定义包,名称为:my_utils (我的工具)
在包内提供2个模块
str_ytil.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_ytil.py

def str_reverse(s):
    return s[::-1]
def substr(s, x, y):
    return s[x:y]

# 测试
if __name__ == '__main__':
    print(str_reverse("小趴菜"))
    print(substr("小丑既然是我自己", 1, 3))

file_util.py

def print_file_info(file_name):
    f = None
    try:

        f = open("file_name", "r", encoding="utf-8")

        content = f.read()
        print(f"文件的全部内容:{content}")
    except Exception as e:
        print(f"错误为:{e}")
    finally:
        if f:
            f.close() # 关闭

def append_to_file(file_name,data):
    f = open("file_name", "a", encoding="utf-8")
    f.write(data)
    f.close()


# 测试
if __name__ == '__main__':
    print_file_info("D:\\book\\study book\\python基础\\代码\\09_异常_模块_包\\123.txt")
    append_to_file("D:\\book\\study book\\python基础\\代码\\09_异常_模块_包\\123.txt", "小趴菜")

主函数

from my_utils import file_util, str_ytil

print(str_ytil.str_reverse("小趴菜"))
print(str_ytil.substr("小丑既然是我自己", 1, 3))

file_util.print_file_info("D:\\book\\study book\\python基础\\代码\\09_异常_模块_包\\123.txt")
file_util.append_to_file("D:\\book\\study book\\python基础\\代码\\09_异常_模块_包\\123.txt", "小趴菜")

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看