当前位置: 首页 > news >正文

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

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 sdef 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_utilprint(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')

相关文章:

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

Python-第九天 Python异常、模块与包一、了解异常1. 什么是异常:2. bug是什么意思:二、异常的捕获方法1. 为什么要捕获异常?2. 捕获异常的语法3. 如何捕获所有异常?三、异常的传递性1.异常是具有传递性的四、Python模块1. 什么是模…...

博彩公司 BetMGM 发生数据泄露,“赌徒”面临网络风险

Bleeping Computer 网站披露,著名体育博彩公司 BetMGM 发生一起数据泄露事件,一名威胁攻击者成功窃取其大量用户个人信息。 据悉,BetMGM 数据泄漏事件中,攻击者盗取了包括用户姓名、联系信息(如邮政地址、电子邮件地址…...

初探Mysql反向读取文件

前言 Mysql反向读取文件感觉蛮有意思的,进行了解过后,简单总结如下,希望能对在学习Mysql反向读取文件的师傅有些许帮助。 前置知识 在Mysql中存在这样一条语句 LOAD DATA INFILE它的作用是读取某个文件中的内容并放置到要求的表中&#x…...

地图坐标系大全:常用地图坐标系详解与转换指南

介绍地图坐标系的基本概念和原理地图坐标系是用于描述地图上位置的数学模型。它可以用来表示地球表面上的任意一个点,使得这个点的位置可以在地图上精确定位。不同的地图坐标系采用不同的基准面和投影方式,因此会有不同的坐标系参数,不同的坐…...

使用 URLSearchParams 解析和管理URL query参数

介绍 首先 URLSearchParams是一个构造函数,会生成一个URLSearchParams对象,参数类型: 不传 | string | object | URLSearchParams, 并且遇到特殊字符它会自动帮我们encode 和 decode const ur…...

一台电脑安装26个操作系统(windows,macos,linux,chromeOS,Android,静待HarmonyOS)

首先看看安装了哪些操作系统1-4: windows系统 四个5.Ubuntu6.deepin7.UOS家庭版8.fydeOS9.macOS10.银河麒麟11.红旗OS12.openSUSE Leap13.openAnolis14.openEuler(未安装桌面UI)15.中标麒麟(NeoKylin)16.centos17.debian Edu18.fedora19.oraclelinux(特别…...

Python配置文件管理之ini和yaml文件读取

1. 引言 当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等。其中最重要的一个方面是配置管理。 良好的配置管理应允许在任何环境中执行软件而不更改代码…...

实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

上一节课,我们做了一些理论知识的铺垫性讲解,讲到了两种开发模式,基于贫血模型的传统开发模式,以及基于充血模型的DDD开发模式。今天,我们正式进入实战环节,看如何分别用这两种开发模式,设计实现一个钱包系统。话不多说,让我们正式…...

webpack当中的代码分割详解

A.代码分割方法一:将原来的单入口文件改为多入口文件 将不同的文件例如js代码文件分为入口文件和测试文件,这个时候打包出来的代码就会根据不同的文件单独打包成属于他们自己的文件 例如以下为单入口文件: entry: ./src/js/index.js 多入口文件:(在输出…...

【SSM】Spring对IoC的实现方式DI详讲

控制反转的一种实现方式——依赖注入一、IoC 控制反转(Overview)依赖注入(DI)- Overview利用 IoC(控制反转)这种思想有什么好处呢?二、依赖注入的方式setter 方式(xml配置中的proper…...

【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】

【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】1、概述2、实验环境3、参考资料-致谢4、自我提升实验效果视频演示5、代码练习-学习后拆解-实验步骤(1)头文件部分-"mwaveview.h"(2)cpp文件部分-"mwav…...

二维数组中的查找(两种解法,各有千秋)

凡事都有可能,永远别说永远。——《放牛班的春天》今天一题为再一个行列都有序的二维数组中寻找一个目标值,我们第一时间想到的可能是很暴力的解法,例如从头到尾进行遍历,这样能做出来,但是借用武忠祥老师的一句话&…...

quartz使用及原理解析

quartz简介 ​ Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能: 持久性作业 - 就是保持调度…...

Datawhale组队学习:大数据 D2——分布式文件系统(HDFS)

妙趣横生大数据 Day2三、Hadoop 分布式文件系统(HDFS)1. 分布式文件系统2. HDFS 简介3. HDFS 体系结构4. HDFS存储原理数据冗余存储数据存储策略数据错误与恢复5. HDFS数据读写过程读写过程HDFS故障类型和其检测方法HDFS编程实验1. 本地和集群文件间操作2. 基本文件操作3. Hado…...

CCIE重认证-300-401-拖图题全

拖图 拖图题 编程 snippet;192.168.5.0,mask 255.255.255.0;number是192.168.5.0;mask是255.255.255.0 snippets;edit-config对config,loopback对name 100,address对primary,mask…...

如何动态的创建类?type的其他用法?什么是元类,如何自定义元类?

1、python中一切都是对象,类也不例外,type是object的子类,是创建类的类。 如何动态的创建一个类? 用脚丫子创建 用脑子创建 不会 不知道什么事动态类 大家可能会有一堆的疑惑,是的我也是有很多疑惑那让我们一起来探个…...

XCP实战系列介绍15-XCP故障排查指导

本文框架 1.概述2. 通过调试器排查2.1 打开Det功能2.2 如何确定Det ErrorCode3. 通过XCP应答报文排查3.1 FE报文组成及故障码对应关系3.2 举个例子1.概述 前面几篇文章我们介绍了基于Davinci开发工具的XCP配置指导,配好了,代码也生成了,但是程序一定能正常跑起来吗?就算软…...

吉林大学软件需求分析与规范(Software Requirements Analysis Specification)

chapter0课程简介:◼ 软件工程专业核心课程之一◼ 软件工程课程体系最前端课程◼ 主要内容:需求的基本概念,需求的分类,需求工程的基本过程,需求获取的方法、步骤、技巧,需求分析和建模技术,需求…...

PyTorch - Conv2d 和 MaxPool2d

文章目录Conv2d计算Conv2d 函数解析代码示例MaxPool2d计算函数说明卷积过程动画Transposed convolution animationsTransposed convolution animations参考视频:土堆说 卷积计算 https://www.bilibili.com/video/BV1hE411t7RN 关于 torch.nn 和 torch.nn.function t…...

leetcode Day2(昨天实习有点bug,心态要崩了)

int carry 0;for(int i a.size() - 1, j b.size() - 1; i > 0 || j > 0 || carry; --i, --j) {int x i < 0 ? 0 : a[i] - 0;int y j < 0 ? 0 : b[j] - 0;int sum (x y carry) % 2;carry (x y carry) / 2;str.insert(0, 1, sum 0);}return str;加一&a…...

另一种思考:为什么不选JPA、MyBatis,而选择JDBCTemplate

以下内容转载自&#xff1a;https://segmentfault.com/a/1190000018472572 作者&#xff1a;scherman 因为项目需要选择数据持久化框架&#xff0c;看了一下主要几个流行的和不流行的框架&#xff0c;对于复杂业务系统&#xff0c;最终的结论是&#xff0c;JOOQ是总体上最好的…...

LeetCode 338. 比特位计数

给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;[0,1,1] 解释&#xff1a; 0 --> 0 1 --> …...

排序评估指标——NDCG和MAP

在搜索和推荐任务中&#xff0c;系统常返回一个item列表。如何衡量这个返回的列表是否优秀呢&#xff1f; 例如&#xff0c;当我们检索【推荐排序】&#xff0c;网页返回了与推荐排序相关的链接列表。列表可能会是[A,B,C,G,D,E,F],也可能是[C,F,A,E,D]&#xff0c;现在问题来了…...

[Android Studio] Android Studio Virtual Device(AVD)虚拟机的功能试用

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f680;write…...

kafka-3-kafka应用的核心要点和内外网访问

kafka实战教程(python操作kafka)&#xff0c;kafka配置文件详解 Kafka内外网访问的设置 1 kafka简介 根据官网的介绍&#xff0c;ApacheKafka是一个分布式流媒体平台&#xff0c;它主要有3种功能&#xff1a; (1)发布和订阅消息流&#xff0c;这个功能类似于消息队列&#x…...

VS2017+OpenCV4.5.5 决策树-评估是否发放贷款

决策树是一种非参数的监督学习方法&#xff0c;主要用于分类和回归。 决策树结构 决策树在逻辑上以树的形式存在&#xff0c;包含根节点、内部结点和叶节点。 根节点&#xff1a;包含数据集中的所有数据的集合内部节点&#xff1a;每个内部节点为一个判断条件&#xff0c;并且…...

Prometheus 记录规则和警报规则

前提环境&#xff1a; Docker环境 涉及参考文档&#xff1a; Prometheus 录制规则Prometheus 警报规则 语法检查规则 promtool check rules /path/to/example.rules.yml一&#xff1a;录制规则语法 groups 语法&#xff1a; groups:[ - <rule_group> ]rule_group…...

(API)接口测试的关键技术

接口测试也就是API测试&#xff0c;从名字上可以知道是面向接口的测试活动。所以在讲API测试之前&#xff0c;我们应该说清楚接口是什么&#xff0c;那么接口就是有特定输入和特定输出的一套逻辑处理单元&#xff0c;而对于接口调用方来说&#xff0c;不用知道自身的内部实现逻…...

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

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

linux环境搭建私有gitlab仓库

搭建之前&#xff0c;需要安装相应的依赖包&#xff0c;并且要启动sshd服务(1).安装policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]# sudo yum install -y curl policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]…...

公司做网站比较好/360社区app

这里写自定义目录标题一、实验目的二、实验内容三、实验要求四、实验代码实验结果一、实验目的 理解操作系统的进程调度方法&#xff0c;并通过一个简单的进程调度模拟程序的实现&#xff0c;加深对进程调度算法&#xff0c;进程切换的理解。 二、实验内容 1、采用动态优先数…...

html5笑话网站源码/谷歌的推广是怎么样的推广

1&#xff1a;关系型数据库。 比如常见的 mysql、oracle、sqlserver 等&#xff0c;这类数据库基本上都支持 jdbc 或者 odbc 链接&#xff0c;所以报表工具基本上都支持。 2&#xff1a;文本文件 常见的 txt、csv、excel 等文本文件&#xff0c;这类文本文件就看各类报表的支…...

长沙网站seo技巧/免费网站制作软件平台

假设检验&#xff1a; p值&#xff1a;得到零假设中极端情况的概率。当p值很小时&#xff0c;认为零假设不成立。 单侧检验和双侧检验&#xff1a; z统计量&#xff1a;(由z分数根据统计量推导而来)&#xff1b;&#xff08;当n>30时&#xff09;服从正态分布 t统计量&a…...

免费用的云服务器/seo网站排名软件

在这里插入代码片45个Vue开源项目汇总在过去的一年里,我们比较了将近 12,000 个 Vue.js 开源项目和库,从中挑选了最好的 45 个 这些项目和库可以分为 3 类:1.用户界面(1~19)2.Vue.js 工具(20~36)3.项目(37~45)这是一个非常好的清单,精心挑选了 2018 年 1 月至 12 月期…...

网站改版建设的合同/信息发布平台推广

上一节我们分析了 Weave 的网络结构&#xff0c;今天讨论 Weave 的连通和隔离特性。 首先在host2 执行如下命令&#xff1a; weave launch 192.168.56.104 这里必须指定 host1 的 IP 192.168.56.104&#xff0c;这样 host1 和 host2 才能加入到同一个 weave 网络。 运行容器 bb…...

深圳网站建设公司 概况/平面设计主要做什么

说的 捱三顶四 地方转载于:https://blog.51cto.com/1369879/284697...