Python-第九天 Python异常、模块与包

news2024/9/28 17:28:20

Python-第九天 Python异常、模块与包

  • 一、了解异常
    • 1. 什么是异常:
    • 2. bug是什么意思:
  • 二、异常的捕获方法
    • 1. 为什么要捕获异常?
    • 2. 捕获异常的语法
    • 3. 如何捕获所有异常?
  • 三、异常的传递性
    • 1.异常是具有传递性的
  • 四、Python模块
    • 1. 什么是模块?
    • 2. 如何导入模块
    • 3. 注意事项:
    • 4.自定义模块
      • 4.1. 如何自定义模块并导入?
      • 4.2. __name__变量的功能是
      • 4.3. 注意事项
  • 五、Python包
    • 1. 什么是Python的包?
    • 2. __init__.py文件的作用
    • 3. __all__变量的作用
  • 六、安装第三方Python包
    • 1.什么是第三方包
    • 2. 如何安装
      • 2.1 在命令提示符内安装
      • 2.2 换源
      • 2.3 在PyCharm中安装
    • 3. 综合案例

一、了解异常

1. 什么是异常:

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

2. bug是什么意思:

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

二、异常的捕获方法

1. 为什么要捕获异常?

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

2. 捕获异常的语法

try:
    可能发生异常的语句
except[异常 as 别名:]
    如果出现异常执行的代码
[else:]
    未出现异常时应做的事
[finally:]
    不管出不出现异常都会做的事

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

# 基本得捕获语法
try:
    f = open(r'C:\Users\xiaze\Desktop\1.txt','r',encoding='UTF-8')
except:
    print('出现了异常,因为文件不存在,我将open的模式,改为w模式去打开')
    f = open(r'C:\Users\xiaze\Desktop\1.txt','w',encoding='UTF-8')
    
# 捕获指定异常
try:
    print(name)
    # 1 / 0
except NameError as e:
    print('出现了变量名未定义')
    

# 捕获多个异常
try:
    # print(name)
    1 / 0
except (NameError,ZeroDivisionError) as e:
    print('出现了变量名未定义或者除以0的异常')
    print(e)

# 捕获所有异常
try:
    print(name)
    # 1 / 0
except Exception as e:
    print('出现异常了')
    print(e)

3. 如何捕获所有异常?

异常的种类多种多样,如果想要不管什么类型的异常都能捕获到,那么使用:

  • except:
  • except Exception:
    两种方式捕获全部的异常

三、异常的传递性

1.异常是具有传递性的

当函数func01中发生异常, 并且没有捕获处理这个异常的时候, 异常
会传递到函数func02, 当func02也没有捕获处理这个异常的时候
main函数会捕获这个异常, 这就是异常的传递性.

在这里插入图片描述

提示:
当所有函数都没有捕获异常的时候, 程序就会报错

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

四、Python模块

1. 什么是模块?

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

2. 如何导入模块

模块在使用前需要先导入 导入的语法如下:

[from 模块名] import [模块 || 变量 | 函数 | *] [as 别名]

常用的组合形式如:

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

3. 注意事项:

  • from可以省略,直接import即可
  • as别名可以省略
  • 通过”.”来确定层级关系
  • 模块的导入一般写在代码文件的开头位置
# import 模块名  
# 使用import导入time模块的所有功能(函数)
import time
time.sleep(5)

# from 模块名 import 类、变量、方法等
# 使用from导入time的sleep功能(函数)
from time import sleep
sleep(5)

# from 模块名 import *
# 使用 * 导入time模块的全部功能
from time import *
sleep(5)

# import 模块名 as 别名
import time as t
t.sleep(5)

# from 模块名 import 功能名 as 别名
from time import sleep as sl
sl(5)

4.自定义模块

4.1. 如何自定义模块并导入?

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

4.2. __name__变量的功能是

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

def test1(a, b):
    print(a+b)
if __name__ == '__main__':
    test1(2, 1)

4.3. 注意事项

不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的
__all__变量可以控制import *的时候哪些功能可以被导入

__all__ = ['test2']

在这里插入图片描述

五、Python包

1. 什么是Python的包?

包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。

2. init.py文件的作用

创建包会默认自动创建__init__.py的文件(如果没有创建,手动创建一个空的即可),通过这个文件来表示一个文件夹是Python的包,而非普通的文件夹。
在这里插入图片描述

3. __all__变量的作用

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

"""
__init__.py 
"""

__all__ = ['my_modle1']

"""
test.py 
"""

import myPackage.my_modle1
myPackage.my_modle1.test1()

# from myPackage import my_modle2
# my_modle2.test2()

# from myPackage import *
# my_modle1.test1()
# my_modle2.test2()   # 无法使用
"""
my_modle1.py 
"""
def test1():
    print('模块一的test1被调用')

"""
my_modle2.py 
"""
def test2():
    print('模块二的test2被调用')

六、安装第三方Python包

1.什么是第三方包

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

在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:

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

这些第三方的包,极大的丰富了Python的生态,提高了开发效率。
但是由于是第三方,所以Python没有内置,所以我们需要安装它们才可以导入使用哦。

2. 如何安装

2.1 在命令提示符内安装

pip install 包名称

使用指定源安装,获取本次更快下载速度

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称

2.2 换源

切换为国内镜像源,获取以后所有文件更快下载速度

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

查看是否切换成功

pip config list

在这里插入图片描述

2.3 在PyCharm中安装

在这里插入图片描述

3. 综合案例

创建一个自定义包,名称为:my_utils (我的工具)
在包内提供2个模块

  • str_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),接收文件路径以及传入数据,将数据追加写入到文件中

构建出包后,尝试着用一用自己编写的工具包。

  1. 新建文件夹 my_utils
  2. 在文件夹下新建三个文件 __init__.py str_util.py file_util.py

如图所示
在这里插入图片描述
其中__init__.py为空

str_util.py 内容如下

"""
str_util.py (字符串相关工具,内含:)
    函数:str_reverse(s),接受传入字符串,将字符串反转返回
    函数:substr(s, x, y),按照下标x和y,对字符串进行切片
"""


def str_reverse(s):
    """
    str_reverse(s),接受传入字符串,将字符串反转返回
    :param s: 传入的字符串
    :return:  反转后返回的字符串
    """
    s = s[::-1]
    return s


def substr(s, x, y):
    """
    substr(s, x, y),按照下标x和y,对字符串进行切片
    :param s: 传入的字符串
    :param x: 切片的起始位置(包含)
    :param y: 切片的结束位置(不包含)
    :return:  切片后的新字符串
    """
    s = s[x:y]
    return s


# if __name__ == '__main__':
#     print(str_reverse('abcdefg'))  # 'gfedcba'
#     print(substr('abcdefg', 2, 5))  # 'cde'

file_util.py内容如下

"""
file_util.py(文件处理相关工具,内含:)
    函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
    函数:append_to_file(file_name, data),接收文件路径以及传入数据,将数据追加写入到文件中
"""


def print_file_info(file_name):
    """
    print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
    :param file_name: 传入文件的路径
    :return:  无返回值
    """
    try:
        f = open(file_name, 'r', encoding='UTF-8')
    except Exception as e:
        print(f'打开文件失败:{e}')
    else:
        # 打开成功,打印全部内容
        for line in f:
            print(line)
        f.close()


def append_to_file(file_name, data):
    """
    append_to_file(file_name, data),接收文件路径以及传入数据,将数据追加写入到文件中
    :param file_name: 传入文件的路径
    :data: 需要追加到文件中的数据
    :return:  无返回值
    """
    f = open(file_name, 'a', encoding='UTF-8')
    f.write(data)
    f.close()


# if __name__ == '__main__':
#     # print_file_info(r'D:\YuanMa\html\y-k-q\Python\day01-jc\1.txt')
#     append_to_file(r'D:\YuanMa\html\y-k-q\Python\day01-jc\1.txt',
#                    'hhhhhhhhhhhhh\ndddddddddddd')

测试模块内容为

from my_utils import file_util
from my_utils import str_util

print(str_util.str_reverse('abcdefg'))  # 'gfedcba'
print(str_util.substr('abcdefg', 2, 5))  # 'cde'

file_util.print_file_info(r'D:\YuanMa\html\y-k-q\Python\day01-jc\1.txt')
file_util.append_to_file(
    r'D:\YuanMa\html\y-k-q\Python\day01-jc\1.txt', 'aaaaaaaaaa')
file_util.print_file_info(r'D:\YuanMa\html\y-k-q\Python\day01-jc\1.txt')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

21. 合并两个有序链表

题目链接:解题思路:遍历,双指针:因为两个链表有序,所以只需要依次比较两个元素的大小,然后添加到新的链表中即可first指针指向第一个链表l1,second指针指向第二个链表l2,answer保存合…

Python3 JSON 数据解析

Python3 JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。json.loads(): 对数据进行解码。 在 json 的编解码…

CleanMyMac4.12.5最新版安装下载教程

告别硬盘空间不足,让您的Mac极速如新CleanMyMac是一款强大的 Mac 清理、加速工具和健康卫士,让您的 Mac 加快启动速度。CleanMyMac是一款专业的Mac清理软件,可智能清理mac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻…

01:入门篇 - 初识 CTK

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 CTK 是什么 CTK:支持生物医学图像计算的公共开发包 CTK 全称:Common ToolkitCTK 主页:http://www.commontk.org/Github 地址:https://github.com/commontkCTK 标志 Logo 是一个品牌的形象,对外它传递的…

关于 Docke r安装 Redis 的评论区问题总结及解答

前言: 文章链接:史上最详细Docker安装Redis (含每一步的图解)实战 原文标题只是想让我这篇文章,能够多得到大家的一些关注,事实证明它做到了,当然看到收藏量的那一刻,我也明白&…

数据结构课程设计—简单行编辑程序

简单行编辑程序 一、引言 1.1 问题的提出 文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。 被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,…

强化学习基础知识

强化学习是一种机器学习方法,通过agent与environment的互动,学习适当的action policy以取得更大的奖励reward。本篇博客介绍强化学习的基础知识,与两类强化学习模型。 目录强化学习的基础设定policy based 强化学习的目标3个注意事项实际训练…

Python:跳蚱蜢(BFS判重)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 如下图所示: 有 9 只盘子,排成 1 个圆圈。 其中 8 只盘子内装着 8 只蚱蜢,有一个是空盘。 我们把这些蚱蜢顺时针编号为 1 ~ 8。 …

Java【数据结构】—— 冒泡排序、选择排序、直接插入排序

Java实现冒泡排序、选择排序、直接插入排序一、排序的概念及稳定性二、冒泡排序1.基本思想2.代码实现三、选择排序1.基本思想2.代码实现四、直接插入排序1.基本思想2.代码实现五、复杂度及稳定性分析1.冒泡排序2.选择排序3.直接插入排序一、排序的概念及稳定性 - 概念&#xf…

文件断点续传

1、前端上传文件前请求媒资接口层检查文件是否存在,如果已经存在则不再上传。 2、如果文件在系统不存在前端开始上传,首先对视频文件进行分块 3、前端分块进行上传,上传前首先检查分块是否上传,如已上传则不再上传,如…

奇舞周刊第482期:每天都在用,也没整明白的 React Hook

记得点击文章末尾的“ 阅读原文 ”查看哟~下面先一起看下本期周刊 摘要 吧~奇舞推荐■ ■ ■每天都在用,也没整明白的 React Hook推荐理由:针对我们经常使用的 React Hook,本文详细介绍了 useState、useEffect、useContext、useCallback、use…

IP协议格式、IP地址管理、路由选择

目录 一、IP协议格式 16位总长度 ip协议针对传输层的UCP协议或者TCP协议,进行传输的时候,需不需要进行分片传输(拆包传输) 如何进行分片 和 组合分片 8位生存时间: 8位协议、16位校验和、32位源端口、32位目的端…

Agilent E4982A、Keysight E4982A、LCR 表,1 MHz 至 3 GHz

Agilent E4982A、Keysight E4982A、HP E4982A LCR 表,1 MHz 至 3 GHz 产品概览 KEYSIGHT E4982A(安捷伦) Keysight E4982A LCR 表为需要高频(1 MHz 至 3 GHz)阻抗测试的无源元件制造行业提供一流的性能&#xff0c…

Redis实战11-实现优惠券秒杀下单

本篇,咱们来实现优惠券秒杀下单功能。通过本篇学习,我们将会有如下收获: 1:优惠券领券业务逻辑; 2:分析在高并发情况下,出现超卖问题产生的原因; 3:解决超卖问题两种方…

快速排序算法原理 Quicksort —— 图解(精讲) JAVA

快速排序是 Java 中 sort 函数主要的排序方法&#xff0c;所以今天要对快速排序法这种重要算法的详细原理进行分析。 思路&#xff1a;首先快速排序之所以高效一部分原因是利用了离散数学中的传递性。 例如 1 < 2 且 2 < 3 所以可以推出 1 < 3。在快速排序的过程中巧…

C++——C++11 第一篇

目录 统一的列表初始化 &#xff5b;&#xff5d;初始化 decltype ​编辑 nullptr STL中一些变化 右值引用和移动语义 左值引用和右值引用 总结 左值引用优缺点 右值引用&#xff08;将亡值&#xff09; 拷贝赋值和移动赋值 万能引用|完美转发 移动构造和移动赋值注意…

C#操作字符串方法 [万余字总结 · 详细]

C#操作字符串方法总结C#常用字符串函数大全C#常用字符串操作方法C#操作字符串方法总结C#常用字符串函数大全 Compare 比较字符串的内容&#xff0c;考虑文化背景(场所)&#xff0c;确定某些字符是否相等 CompareOrdinal 与Compare一样&#xff0c;但不考虑文化背景 Format 格…

5.3 BGP路由黑洞

5.2.3实验3:BGP路由黑洞 1. 实验目的 熟悉BGP路由黑洞的应用场景掌握BGP水平分割的配置方法2. 实验拓扑 实验拓扑如图5-3所示: 图5-3:BGP路由黑洞 3. 实验步骤 配置IP地址 R1的配置 <Huawei>syst

前端开发常用案例(一)

前端开发常用案例1.实现三角形百度热榜样式分页效果小米商城自动轮播图效果二级下拉菜单效果时间轴效果展示音乐排行榜效果鼠标移入文字加载动画鼠标悬停缩放效果1.实现三角形 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8…

CCNP350-401学习笔记(51-100题)

51、Which statement about a fabric access point is true?A. It is in local mode and must be connected directly to the fabric edge switch. B. It is in local mode and must be connected directly to the fabric border node C. It is in FlexConnect mode and must …