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

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

十四、模块和包、异常

14.1、模块了解,及基础

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

导入模块的方式
. 1、导入math模块
. 2、调用模块内的sqrt()功能函数

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、制作模块

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

小需求:

# 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__右边接列表:作用,可以控制当前模块的导入行为

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

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

def testB():
    print("testB")

14.5、包的使用

了解包:包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为_init_.py文件,那么这个文件夹就被称之为包

制作包:
	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:
>     如果出现异常执行的代码

快速体验:需求:尝试以r(read:读取)模式打开文件,如果文件不存在,则以w(写入) 方式打开。w(写入特点:当打开文件不存在会新建文件)

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、异常的传递

需求:

. . . a、尝试只读方式®打开test2.txt文件,如果文件存在则读取文件内容,文件不存在则提示用户即可。
. . . b、读取内容要求:尝试循环读取内容,读取过程中如果检测到用户意外终止程序,则except捕获异常并提示用户

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值