0
点赞
收藏
分享

微信扫一扫

python进阶-----第十四课 --模块、包、和异常

小编 2022-04-02 阅读 37

python进阶,在第一期的基础上做了极大的优化,整体更加美观易懂

十四、模块和包、异常

14.1、模块了解,及基础

1、 import 模块名
语法:
>     import 模块名
>     import 模块名1, 模块名2......
>     模块名.功能名()

import math    # 导入math函数
print(math.sqrt(16))  # 返回16的平方跟
# 结果:4.0
2、from 模块名  import 功能名
> 	 语法:from 模块名 import 功能1, 功能2, 功能3
from math import sqrt  # 从math模块中导入sqrt函数
print(sqrt(81))
# 结果:9.0
3、 from 模块名 import *
语法:
>     from 模块名 import *
from math import *  # *号表示模块中所有函数全部导入
print(sqrt(49))
# 结果:7.0
4、 as定义别名 
语法:
>     import 模块名 as 别名
>     from 模块名 import 功能名 as 别名

小需求:运行后暂停2秒打印hello world!!!

a、 模块起别名

# 1、导入time中的sleep函数(休眠)
import time as q  # 使用as别名后,无法再使用time模块,因为给time模块起别名为q
q.sleep(2)
print("hello world!!!")
# 结果:
hello world!!!

b、功能函数起别名

from time import sleep as sd  # 同样使用sd别名后,无法再使用sleep函数,使用会报错
sd(2)  # 会先暂停2秒再打印
print("hello world!!")
# 结果:
hello world!!

14.2、制作模块

小需求:

# a、新建一个python文件,命名为my_modulel.py, 并定义testA函数,testA函数完成2个数字的加法运算 
def testA(a, b):
    print(a + b)
# b、测试模块 
# 测试模块(一般测试模块不注释,方便后期维护)
# c、调用模块
testA(5, 9.99)  #测试模块testA函数没问题
# 结果:14.99  # 结果正确
# 系统变量:__name__,如果是在当前文件下使用的话,那么它打印的结果是__main__,否则是当前模块(my_modulel1)的名字
print(__name__)  # 结果:__name__
if __name__ == "__name__":  # 判断是否在当前文件模块下去执行if语句中的代码
    # 测试模块
    testA(1, 4)  # 测试模块中的testA函数有没有问题
# 结果: __main__

新建.py文件,调用模块

# 1、导入模块
# 2、使用模块
import my_modulel_1
my_modulel_1.testA(4, 5)
结果:9

14.3、模块定位顺序

搜索顺序:
 1、当前目录
 2、如果不在当前目录,python则搜索在PYTHONPATH下的每个目录。 
 3、如果都找不到,python会查看默认路径
注意:
     a、自己的文件名不要和已有的模块名重复,否则导致模块功能无法使用
     b、使用from 模块名 import 功能的时候,注意功能名字重复,调用到的是最后定义或导入的功能
# time模块中导入sleep()
def sleep():
    print("这是一个导入的功能")

from time import sleep
sleep(2)     # 暂停2秒再运行下面的程序,下面没有不运行

14.4、__all__列表

需求:
如果一个模块文件中有_all_变量,当使用from xx import *导入时,只能导入这个列表中的元素

# 模块代码:(新建.py文件, 在新的py文件里面做)
__all__ = ["testA"]  # 表示testA可以被其他.py文件导入,而testB不行如果要导入testB,则要在列表中加上testB
def testA():
    print("testA")

def testB():
    print("testB")

14.5、包的使用

制作包:
	1[New]-[Python Package]-输入包名-[ok]-新建功能模块(有联系的模块)。
    2、注意:新建包后,包内部会自动创建_init_.py文件,这个文件控制着包的导入行为。

14.6、导入包

方法一

>     import 包名.模块名
>     包名.模块名.目标名

例如:
# 例如:导入mypackage包下的模块,使用模块内的info__print1函数
import mypackage.module1   # mypackage->包名, module1->模块名
mypackage.module1.info_print1()   # # mypackage->包名, module1->模块名, info_print1()->函数名

方法二

>      注意:必须在_init_.py文件中添加_all_=[],控制允许导入的模块列表,[中填允许导入的包,不填无异于拒绝所有]
# _init_是跟all列表大同小异,是用来控制包的导入行为
# _all_控制模块的导入行为

from 包名 import *
模块名.目标

from mypackage import *
modulel.info_print1

14.7、异常

实例:以r(读取)方式开一个不存在的文件。open(“test.txt”, “r”)

> 语法: try:
>     可能发生错误的代码 except:
>     如果出现异常执行的代码
try:
    file = open("test2.txt", "r")  # file相当于是使用open打开的这个文件
except:
    file = open("test2.txt", "w")  # w写入,文件不存在会写入文件
file.close()  # 关闭file文件

14.8、捕获异常

捕获异常语法:

try:
    可能发生错误的代码
except:
    异常类型:如果出现异常执行的代码
注意:
	 a、如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
     b、一般try下方只放一行尝试执行的代码

例如

# 运行
print(eudg)  # 会出现
NameError : name 'eudg' is not defined/名字错误:未定义名称“eudg”
异常类型   :异常描述信息
# 运行:
print(1 / 0)  # 会出现
ZeroDivisionError: division by zero /零除错误:被零除
异常类型          :异常描述信息

a、捕获指定异常

try:
    print(eudg)
except NameError:
    print("代码错误,错误原因:名字错误")
# 结果:代码错误,错误原因:名字错误

b、捕获多个指定异常

try:
    print(1 / 0)
except (NameError, ZeroDivisionError):  # 当不确定异常类型时候可以except后接元组,将异常类型放入元组
    print("代码错误,错误原因:")
# 结果:代码错误,错误原因:

c、捕获异常描述信息

try:
    print(1/0)
except (NameError, ZeroDivisionError) as a:  # as后变量可随意命名,符合命名规范即可
    print(a)
结果:division by zero

d、捕获所有异常 Exception是所有程序异常类型的父类(包括所有异常)

try:
    print(1/0)
except Exception as re:
    print(re)

e、异常的else:如果没有异常需要执行的代码

捕获else异常语法:
try:
    可能发生错误的代码
except:
    异常类型:如果出现异常执行的代码
else:
    print("代码无错")

try:
    print(1)
except Exception as re:
    print(re)
else:
    print("代码无错")
# 结果:
>>> 1
>>> 代码无错

f、异常的finally

捕获异常语法:
try:
    可能发生错误的代码
except:
    异常类型:如果出现异常执行的代码
finally:
    无论是否有异常,都可以去执行

try:
    file = open("test2.txt", "r")  # file相当于是使用open打开的这个文件
except:
    file = open("test2.txt", "w")  # w写入,文件不存在会写入文件
finally:
    file.close()  # 关闭file文件

14.9、异常的传递

需求:

import time
try:
    file1 = open("../day19文件操作/test2.txt", "r")
    # 尝试循环读取内容
    try:
        while True:
            com = file1.readline()  # file1.readline()  表示对文件内容进行一行一行的读取
            # 如果读取完成后退出循环
            if len(com) == 0:
                break
            time.sleep(2)
            print(com)  # 验证方法,在命令提示符中运行代码,然后Ctrl + c,可以终止程序
    except:
        print("程序被意外终止!!!")
except:
    print("该文件不存在")
举报

相关推荐

0 条评论