课堂笔记17(异常、模块、包)

本文详细讲解了Python中异常的捕获、类型划分、try-except-else-finally结构,以及主动触发异常、自定义异常和断言的概念。通过实例演示如何避免程序因错误而终止,以及如何利用模块和包进行有效编程。
摘要由CSDN通过智能技术生成

异常捕获

异常:当python无法正常处理程序的时候就会发生异常。异常是python对象,表示错误。
在这里插入图片描述要整数1的时候如果输入浮点数1.0会报错,改成转为浮点数的时候能够执行,但是如果失误多输入了一个点的时候又会报错,这样就可以发现要实现一个内容的时候,可能会存在多种失误从而引发异常导致报错,此时如果用判断可以实现,但是需要很多判断条件过于复杂。

在这里插入图片描述通过捕获异常避免报错问题后程序的终止。

异常捕获代码块

try:
正常程序执行此块代码
except:
抛出欧五执行此代码块

例:
在这里插入图片描述
在这里插入图片描述
通过上图可以发现当发生报错的时候也能有异常的时候的执行程序,但是,并没有显示发生的异常类型。

所以需要 异常类型捕获

异常类型捕获语法

try:
正常代码
except 当异常对象【Excepttion】 as e: #e=当前异常对象
print(e)

在这里插入图片描述
细分错误一般用于载入日志。
图中的ValueError 就是细分错误的一种。如果知道错误类型。可以替代Exception。

在细分错误的时候,Exception一般放在最后,避免其他错误没有考虑到的情况。
在这里插入图片描述

try except else

如果抛出异常 执行 except内部代码
如果程序正常执行 else内部代码
在这里插入图片描述在这里插入图片描述
注意:不能有多个else,只能有一个。

try finally

不管程序有无发生异常,都执行finally内部代码
在这里插入图片描述在这里插入图片描述
注意:不能有多个finally,只能有一个。

主动触发异常

在实际开发中,在程序不满足某条件时,通常会主动抛出异常。

语法:
raise Excepton()【()内部填写异常要抛出的信息】

例:
煎饼时间如果小于5则主动触发没熟异常,否则就是熟了。
在这里插入图片描述
在这里插入图片描述
主动触发异常的常用情况:
例如:
假设场景
1、连接数据库的函数【假设连接数据库函数为db()】如果db函数内部有地方会报错,则主动报出异常。
2、自身错误则载入日志
在这里插入图片描述

自定义异常

当需要自定义满足一些规则时候,就可以自定义异常。
自定义异常 常通过创建一个新的异常类,自定义名字与内容,并且需要继承Exception类实现。

例:
在这里插入图片描述在这里插入图片描述
首先创建了自定义的错误类:在类的内部编写了自定义和返回对象。

之后进入捕获异常程序:在try中设置主动触发异常传入实参太老了。此时就会发生异常,那么就进入了Except内部。之后在自定义类中捕获错误,发现错误是太老了。则打印输出结果太老了。

断言

assert断言用于判断一个表达式,当表达式条件为False时触发断言异常 AssertionError。

条件成立的时候会往下执行代码,条件不成立的时候会直接抛出异常 AssertionError提示。

语法:
assert 断言【条件】
断言一般用于故意的时候。 故意要条件不成立的时候报错。强制用户服从
在这里插入图片描述注意:断言用于强制用户服从,可以捕获,但是一般不捕获。

模块

模块是一个包含所有你定义的函数和变量的文件,其扩展名为 .py 。模块可以被其他程序引入,以使用该模块中的函数等功能。这也是使用python标准库的方法。

导入模块的方式
  • import module_name(模块名称)
    例:
    第一步创建一个modu1的py文件。在这里插入图片描述第二步在创建modu2的py文件并导入modu1模块。
    在这里插入图片描述调低命令错误等级。操作如图所示。在pycharm的右下角。
    在这里插入图片描述在这里插入图片描述模块中的方法调用既:通过导入模块后,模块名+ . +模块中的方法名调用

  • from module_name import name1, name2…(从模块中导入模块内的函数或者类等)
    例:以函数为例:
    第一步:创建modu1模块在这里插入图片描述
    第二步:在modu2中导入模块中的函数
    在这里插入图片描述

  • from module_name import *(“ *”在这里代表通配符,表示导入所有的意思)
    例:
    在modu2模块中调用modu1中的函数在这里插入图片描述图片2
    注意⚠️:一般不建议使用该方法。1、容易消耗费内存,因为是导入了modu1模块中的所有内容。可能会有所不需要的内容。2、会存在命名冲突从而覆盖的情况。

  • from module_name import func as demo_func(解决导入模块后发生命名冲突问题还能精简函数名)【as 相当于重命名】
    例:
    在这里插入图片描述注意:该方法不能将函数名连着书写,如果需要的使用,则from使用多次。 在这里插入图片描述

常用内置模块

sys模块

sys模块是与python解释器交互模块

sys模块常用方法
  1. sys.argv[] :从程序外部获取参数的桥梁
    在这里插入图片描述

    • sys.argv[0]:程序本身文件路径
      在这里插入图片描述

    • sys.argv[1]:外部运行时传递的参数

      第一步:在pycharm中创建demo5,res=sys.argv[1] 通过1来获取参数。创建判断语句 在这里插入图片描述
      第二步:在pycharm中复制路径
      在这里插入图片描述第三步:打开命令行【mac即终端】,切换盘符,比如当前是在c盘,需要切换到d盘则直接d:之后回车运行即切换成功。然后cd 路径就会进入。
      在这里插入图片描述第四步:在外部运行模块并传参。
      在这里插入图片描述

  2. sys.verson:用来显示解释器版本信息【verson就是版本的意思】
    在这里插入图片描述

  3. sys.path:用来显示模块搜索路径
    在这里插入图片描述

  4. sys.exit():用来退出程序在这里插入图片描述
    也可以直接用内置的exit() 效果是一致的。

os模块

os模块是与操作系统相关的模块
操作系统就是Mac、windows等系统。

os模块常用方法
  1. os.getcwd():用来打印当前工作目录
    在这里插入图片描述
  2. os.chdir():改变当前工作目录
    在这里插入图片描述更改后可以在切换后的盘下去新建文件夹。
  3. os.makedirs():以递归方式创建多个文件夹【括号内填写路径】
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. os.removedirs():以递归方式删除多个空文件夹
    在这里插入图片描述注意⚠️:只能删除空文件夹
    在这里插入图片描述
  5. os.mkdir:创建单个文件夹【和makedirs的区别是这个创建单个文件夹】
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
  6. os.rmdir():删除单个空文件夹【同mkdir一样只能删除单个文件夹,同时要求是空文件夹】
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
  7. os.path.exists():判断该路径下的文件或文件夹是否存在
    在这里插入图片描述在这里插入图片描述这个可以和判断语句结合。判断路径是否存在,如果存在则没事。不存在则进行创建路径。
    在这里插入图片描述
  8. os.path.join():拼接路径
    在这里插入图片描述
time模块

time模块是与时间相关的模块

time模块常用方法
  1. time.sleep():延迟执行时间
    先导入time模块,之后调用time.sleep()【括号内传的参数是数字代表 秒 ,指休息传入的秒数】
    注意:这是一个强势等待,传入的参数可以为整数,也可以为浮点数在这里插入图片描述

  2. time.time():秒时间戳【返回的是一个浮点数,返回的是当前的时间,并且单位是秒】
    在这里插入图片描述

  3. time.localtime():本地时间【括号内传入秒的时间】以元组形式返回
    在这里插入图片描述不传入参数的时候,默认为当前本地时间,并且以元组的形式返回。在这里插入图片描述

  4. time.strftime():接收以时间元组,并返回以可读字符串表示的当地时间,格式有参数format决定【time.strftime(format, p_tuple=None)该方法内部有两个参数,第一个format代表格式,第二个为可选参数,可以传入元组】

format格式要求:

格式样式代表含义
%Y年,四位数的年份表示(00-99)
%y年,两位数的年份表示(000-9999)
%m月(01-12)
%d日,月中的一天(0-31)
%H时,24小时制小时数(0-23)
%I时,12小时制小时数(01-12)
%M分钟(00-59)
%S秒(00-59)
%Z当前时区的名称
%a本地简化星期名称
%A本地完整星期名称
%b本地简化的月份名称
%B本地完整的月份名称
%c本地相应的日期表示和时间表示
%j年内的一天(001-366)
%p本地A.M或P.M的等价符
%U一年中的星期数(00-53)星期天为星期的开始
%w星期(0-6),星期天为星期的开始
%W一年中的星期数(00-53)星期一为星期的开始
%x本地相应的日期表示
%X本地相应的时间表示
%%%的本身

format中不能拼接中文,会报错。在这里插入图片描述

补充datetime模块
  1. datetime.datetime.now():获取当前时间。【比time.strftime(format, time.localtime())的运行速度要快】
    第一个datetime:模块
    第二个datetime:类
    now:类中的方法
    在这里插入图片描述
  2. datetime.timedelta():实现日期时间的相加相减在这里插入图片描述
random 模块

random模块是随机模块

random模块常用方法
  1. random.random():随机生成 [0-1)的数【左闭右开,永远取不到1】。
    在random.random的基础上取0-9的数【0-10】,第一步导入random模块。之后,乘以10【扩发范围作用】在这里插入图片描述

  2. random.randint():随机生成整数[ ]。【闭合区间】。
    取1-10 的整数。第一步导入模块,之后使用randint方法。注意:该方法是闭合区间所以直接取值为1-10即可。在这里插入图片描述

  3. random.choice():随机在列表去元素。【非空序列中取元素】
    随机在列表中取出元素。第一步:导入模块,并创建列表在列表中填写元素。在这里插入图片描述

  4. random.shuffle():打乱传入的容器内部顺序并返回。该方法只能洗列表。元组、集合都会报错,不能使用。
    定义一个列表li=[1, 2, 3, 4, 5, 6]
    将列表打乱随机洗牌再传入。
    注意⚠️:这个是直接打乱列表,所以直接打印列表即可。如果打印调用的方法会返回None。在这里插入图片描述

  5. random.sample():随机取样。
    join()函数:连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔号)连接成一个新的字符串。
    语法:‘sep’.join(seq)。
    sep:分隔号,可以为空
    seq:要连接的元素序列、字符串、元组、字典在这里插入图片描述
    字母可以通过ascii用数字来表示。比如ord(‘A’)得到的ascii为65 就是字符转ascii值
    chr(65)得到字母’A’ 通过ascii值转为字符
    在这里插入图片描述

  6. random.randrange():随机取整数 [ )。【左闭右开区间】 和range使用方法基本一致。默认是从0开始取值,步长默认为1。是左闭右开区间。在这里插入图片描述

Json模块

Json是一种使用广泛的轻量数据格式。python标准库中Json模块提供了Json数据的处理功能。

由于Json与python的字典格式非常像。所以python中的Json模块也相当于用来使Json与字典做转换,但要注意的是,Json中的数据必须使用双引号包裹。

Json模块常用方法
  1. json.loads():jspn转为字典(适用于语句)在这里插入图片描述
    注意⚠️:json数据内部的值必须要用双引号包裹,用单引号会报错。
    在这里插入图片描述

  2. json.dumps():字典转为json(适用于语句)
    将字典转为字符串:在这里插入图片描述在这里插入图片描述

  3. json.load():json转为字典(适用于文件)
    json.load(fp):
    fp:文件对象
    先导入json模块。之后调用json.load()函数,将json文件转为字典。
    在这里插入图片描述

  4. json.dump():字典转为json(适用于文件)
    json.dump(obj, fp)
    fp:文件对象
    obj:写入的数据
    如图所示:在这里插入图片描述在这里插入图片描述

包是管理python模块命名空间的形式,任然是以 x.y的形式。【x:是包。 y:是模块名称】

管理py文件。

创建包

pycharm:New中Python Package
在这里插入图片描述
创建包后,包内部自动包含init文件
在这里插入图片描述如果是创建的文件夹,则内部没有init文件,只能手动创建py文件。

包的使用
1、from 包的名称 import 所需要导入的包中的模块名

1、在包 pack02中创建两个py模块文件,分别为demo和demo1
2、在test文件夹中创建bao.py文件。
3、在文件bao中导入demo和demo1模块。

通过从包中导入模块名可以正常运行。
在这里插入图片描述

2、from 包的名称 import * 【包中所有的模块代表*】

但是,from pack02 import * 会报错。【正常情况下,import * 代表导入全部模块的含义,是能够运行的】此处报错原因在于:没有权限。
在这里插入图片描述

设置包的权限

__ all__: 暴露接口。 提供了哪些公开接口的约定。
在包自动生成的init 文件中设置主动暴露接口。
即:
在init文件中创建all语句
在这里插入图片描述
之后发现在创建的bao文件中能够正常运行程序了。在这里插入图片描述

3、 import 包的名称

导入方式: 直接导入包
通过包.模块名.函数()访问。
但是,当没在包的init文件中设置的话会报错无法访问,错误为没有demo模块
在这里插入图片描述
解决方法:
在init文件中 输入
from . import 需要导入的模块。
from后面的‘ . '点代表当前文件。
在这里插入图片描述
再度运行发现可以正常运行。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值