Python异常、模块和包

Python异常、模块和包

  • 1.了解异常
  • 2.异常的捕获方法
  • 3.异常的传递
  • 4.Python模块
  • 5.Python包

1.了解异常

1.1什么是异常
当检测到一个错误是,Python解释器就无法继续执行了,发而出现了一些错误提示,这就是所谓的“异常”,也就是我们常说的BUG。
在这里插入图片描述
1.2bug单词的诞生
早期计算机采用大量继电器工作,马克二型计算机就是这样的。

1945年9月9日,下午三点,马克二型计算机无法正常工作了,技术人员试了很多办法,最后定位到第70号继电器出错。负责人哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”自此之后,引发软件失效的缺陷,便被称为Bug。

在这里插入图片描述
在这里插入图片描述
1.3异常演示
在这里插入图片描述

2.异常的捕获方法

2.1为什么要捕获异常
世界上没有完美的程序,任何程序在运行的过程中,都有可能出现:异常,也就是出现bug
导致程序无法完美运行下去。

我们要做的,不是力求程序完美运行。
而是在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。

这种行为我们称之为:异常处理(捕获异常)
当我们的程序遇到了BUG, 那么接下来有两种情况:
- ① 整个程序因为一个BUG停止运行
- ② 对BUG进行提醒, 整个程序继续运行

显然在之前的学习中, 我们所有的程序遇到BUG就会出现①的这种情况, 也就是整个程序直接奔溃.
但是在真实工作中, 我们肯定不能因为一个小的BUG就让整个程序全部奔溃, 也就是我们希望的是达到② 的这种情况
那这里我们就需要使用到捕获异常

捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。

2.2捕获常规异常
基本语法

try:可能发生错误的代码
except:如果出现异常执行的代码

快速入门
需求:尝试以“r”模式打开文件,如果文件不存在,则以“w”方式打开。

try:f = open('linux.txt','r')
except:f = open('linux.txt','w')

2.3捕获指定异常
基本语法

try:print(name)
except NameError as e:print("name变量未定义")
  • 如果尝试执行的代码的异常类型和要捕获的异常类型不一样,则无法捕获。
  • 一般try下方只放行一行尝试执行的代码。
    2.4捕获多个异常
    当捕获多个异常时,可以吧要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写。
try:print(1/0)
except (NameError, ZeroDivisionError):print('ZeroDivision错误...')

在这里插入图片描述
2.5捕获异常并输出描述信息
基本语法

try:print(1/0)
except (NameError, ZeroDivisionError) as e:print(e)

在这里插入图片描述
2.6捕获所有异常
基本语法

try:print(name)
except Exception as e:print(e)

在这里插入图片描述
2.7异常else
else表示的是如果没有异常要执行的代码

try:print(1)
except Exception as e:print(e)
else:print("我是else,是没有异常的时候执行的代码")

在这里插入图片描述
2.8异常的finally

try:f = open('test.txt', 'r')
except Exception as e:f = open('test.txt', 'w')
else:print('没有异常,真开心')
finally:f.close

3.异常的传递

3.1异常的传递
异常是具有传递性的
函数func01中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02,当func02也没有捕获处理这个异常的时候main函数会捕获这个异常,这就是异常的传递性
提示:当所有函数都没有捕获异常的时候,程序会报错
在这里插入图片描述
利用异常具有传递性的特点,当我们想要保证程序不会因为异常崩溃的时候,就可以在main函数中设置异常捕获,由于无论在整个程序哪里发生异常,最终都会传递到main函数中,这样就可以确保所有的异常都会被捕获
在这里插入图片描述

4.Python模块

4.1模块的导入
什么是模块?
Python模块,是一个Python文件,以.py结尾模块能定义函数,类和变量,模块历也能包含可执行的代码。
4.2模块的作用

  • python中有很多各种不同的模块,每一个模块都可以帮助我们快速的实现一些功能,比如实现和时间相关的功能就可以使用time模块我们可以认为一个模块就是一个工具包,每一个工具包中都有各种不同的工具供我们使用进而实现不同的功能。

4.3模块的导入方式
模块在使用前需要先导入,导入的语法如下:
[from 模块名] import [ 模块 | 类 | 变量 | 函数 | *] [ as 别名]
常用的组合形式如:

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

4.3.1import模块名
基本语法

import 模块名
import 模块名1,模块名2
模块名.功能名()

案例:倒入time模块

#导入时间模块
import time
print("开始")
#让程序睡眠1秒(阻塞)
time.sleep (1)
print("结束")

4.3.2from 模块名 import 功能名
基本语法

from 模块名 import 功能名

案例:倒入time模块中的sleep方法

#倒入时间模块中的sleep
from time import sleep
print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")

4.3.3from 模块名 import *
基本语法

from 模块名 import *
功能名()

案例:导入time模块中所有的方法

#导入时间模块中所有的方法
from time import *
print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")

4.3.4as 定义别名
基本语法

# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名

案例:

#模块别名
import time as tt
tt.sleep(2)
print("Hello")
#功能别名
from time import sleep as sl
sl(2)
print("Hello")

4.4注意事项

  • from可以省略,直接import即可
  • as别名可以省略
  • 通过"."来确定层级关系
  • 模块的导入一般写在代码文件的开头位置

4.5自定义模块
4.5.1制作自定义模块
Python中已经帮我们实现了很多的模块. 不过有时候我们需要一些个性化的模块, 这里就可以通过自定义模块`实现, 也就是自己制作一个模块
案例:新建一个python文件,命名为my_module1.py,并定义test函数
在这里插入图片描述

注意:每个python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块要符合标识符命名规则
4.5.2测试模块
在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,
这个开发人员会自行在py文件中添加一些测试信息,例如,在my_module1.py文件中添加测试代码test(1,1)
在这里插入图片描述
问题:此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行test函数的调用
解决方案
在这里插入图片描述
4.5.3注意事项
在这里插入图片描述
注意事项:当导入多个模块的时候,且模块内有同名功能. 当调用这个同名功能的时候,调用到的是后面导入的模块的功能

4.5.4__all__
如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素
在这里插入图片描述

5.Python包

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

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

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

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

打开我们许久未见的:命令提示符程序,在里面输入:
pip install 包名称
即可通过网络快速安装第三方包
在这里插入图片描述
5.3pip网络优化
由于pip是连接的国外的网站进行包的下载,所以有的时候会速度很慢。

我们可以通过如下命令,让其连接国内的网站进行包的安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
在这里插入图片描述
练习
在这里插入图片描述

def str_reserver(s):"""
功能是将字符串反转:param s: 被反转的字符串:return: 反转后的字符串"""return s[::-1]def substr(s,x,y):"""功能是按照给定的下标完成字符串的切片:param s: 即将被切片的字符串:param x: 切片的开始下标:param y: 切片的结束下标:return: 切片完成后的字符串"""return s[x:y]
if __name__ == '__main__':print(str_reserver("黑马程序员"))print(substr("黑马程序员",1,3))
#file_util.py
def print_file_info(file_name):"""功能是:将给定的路径文件内容输出到控制台中:param file_name: 即将读取的文件:return: None"""f =Nonetry:f = open(file_name,"r",encoding="UTF-8")content = f.read()print("文件内容如下:")print(content)except Exception as e:print("程序出现异常,异常是{e}")finally:if f:   # 如果变量是None,表示False,如果有任何内容,就是Truef.close()def append_to_file(file_name,data):"""功能是将指定的数据追加到指定的文件中:param file_name: 指定的文件路径:param data: 指定的数据:return: None"""f = open(file_name,"a",encoding="UTF-8")f.write(data)f.write("\n")f.close()if __name__ == '__main__':append_to_file("D://test_append","传智教育")

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

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

相关文章

二叉树的最大深度(力扣

int maxDepth(struct TreeNode* root) {if(!root) return 0;return fmax(maxDepth(root->left),maxDepth(root->right))1; }

【开源软件】最好的开源软件-2023-第26名 Accelerate

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

PHP的最新版本是多少?有什么新特性?

截至日期(2022年1月),PHP的最新稳定版本是PHP 8.0。以下是PHP 8.0的一些主要新特性: JIT 编译器: 引入了即时编译(Just-In-Time,JIT)引擎,提升了PHP脚本的执行性能。 命…

可以操作Access的ORM工具,MS Access日期的坑

可以操作Access的ORM工具,MS Access日期的坑 MS Access日期可以查询返回; 但作为参数,不能过滤成功,则试了三种日期类型都不可以; MS Access日期作为入参,在驱动官网找相关资料,找不到实例; …

【精选】小白是如何挖漏洞的(技巧篇)

目录: 怎么找漏洞 找到后如何挖漏洞 关于通杀漏洞N day漏洞的挖掘 漏洞如何提交 每小结都有提供对应的案例,简直不要太nice! 这个月的SRC活动也快开始了,看到群里的小伙伴在问如何找漏洞,SQL注入的漏洞咋找&#x…

理解并使用React的有状态组件和无状态组件

在React中,有状态组件和无状态组件是两种基本的组件类型,它们在特性和使用场景上有所不同。本文将深入探讨这两种组件类型的理解及使用场景。 一、有状态组件 特点: 类组件:React中的有状态组件通常是使用ES6的类语法来定义的。…

SQL注入基础宝典(原理+详解)[每天更新]

简介: 开局先叠甲:新手上路,内容多有纰漏,仅供学习和参考,欢迎在评论区留言,同步更新。 因为自己是自学,没有很系统的知识体系,大半个月来,刷了一些sql注入的题目,包括封神榜&#x…

慢SQL诊断

最近经常遇到技术开发跑来问我慢SQL优化相关工作,所以干脆出几篇SQL相关优化技术月报,我这里就以公司mysql一致的5.7版本来说明下。 在企业中慢SQL问题进场会遇到,尤其像我们这种ERP行业。 成熟的公司企业都会有晚上的慢SQL监控和预警机制。…

思福迪运维安全管理系统 test_qrcode_b RCE漏洞复现

0x01 产品简介 思福迪运维安全管理系统是思福迪开发的一款运维安全管理堡垒机。 0x02 漏洞概述 由于思福迪运维安全管理系统 test_qrcode_b路由存在命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限&#…

【Docker】vxlan的原理与实验

VXLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网),是一种虚拟化隧道通信技术。它是一种Overlay(覆盖网络)技术,通过三层的网络来搭建虚拟的二层网络。 VXLAN介绍 VXLAN是在底层…

【智能家居】八、监控摄像采集、人脸识别比对进行开门功能点

一、使用 fswebcam 测试 USB 摄像头 二、根据demo来实现功能点 三、功能点编写编译运行实现 四、mjpg实现监控识别 五、V4L2 视频设备 Linux 内核模块的一部分 一、使用 fswebcam 测试 USB 摄像头 a. 安装 fswebcam orangepiorangepi:~$ sudo apt update orangepiorangepi:~…

SSL证书可以有效避免劫持和钓鱼攻击

SSL证书对抗劫持和钓鱼攻击起到重要作用。通过使用SSL证书,网站可以防止黑客篡改网站内容或欺骗用户,确保用户所看到的是真实的网站信息,而不是被篡改的内容或诱导性的信息。这有助于保护用户的隐私和安全,并建立用户对网站的信任…

LeetCode008之字符串转换整数 (相关话题:状态机)

题目描述 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格检查下一个字符(假设还…

一天搞定jmeter入门到入职全套教程之Jmeter分布式测试

随着并发量的增大,一台机器就不能满足需求了,所以我们采用分布式(Master-Slaver)的方案去执行高并发的测试 注意事项: Master机器一般我们不执测试,所以可以拿一台配置差些的机器,主要用来采集…

linux查看某个时间段的日志(sed -n)

有时候找出某个时间段的日志,如2023-12-09 20:11:00 到 2023-12-09 20:15:59 用grep不太方便直接过滤出来,能够使用sed根据时间去查 sed -n ‘/开始时间日期/,/结束时间日期/p’ 日志文件名称 如 sed -n /2023-12-09 20:11:00/,/2023-12-09 20:15:59/p…

git patch和使用

patch作用:修复了基线的一个bug,在未合并代码的时候,同步到各个版本的发布分支,用于解决问题 1、patch生成方式 # 方法一 # git 上传代码到页面后,git数字编号后去掉.patch刷新页面,复制更改部分&#xf…

c 语言 堆的解析(自我理解)!!!堆排序,建堆

目录 1.堆是什么? 2.堆的实现和接口。(小堆) 1.头文件 2.初始化 3.摧毁 4.向上调整(重点) 5.向下调整(重点) 6.插入(重点) 7.删除(重点) …

Linux---虚拟机软件

1. 虚拟机软件的介绍 它是能够虚拟出来计算机的一个软件。 常用虚拟机软件: VmwareVirtualBox 说明: 只有安装了虚拟机软件才可以创建虚拟机,当然通过虚拟机软件还可以创建多个虚拟机。 2. 虚拟机的介绍 就是模拟一个真实的计算机,好比一个虚拟的…

go学习之反射知识

反射 文章目录 反射1、反射的使用场景1)结构体标签的应用2)使用反射机制编写函数的适配器(桥连接) 2、反射的基本介绍-1.基本介绍-2.反射的图解-3.反射重要的函数和概念 3.反射快速入门-1.请编写一个函数,演示对&#…

【C进阶】C程序是怎么运作的呢?-- 程序环境和预处理(下)

前言: 这是程序环境和预处理的下半篇文章。至此,关于c语言知识点:从编译到运行的过程已讲解完毕。传送🚪,上半篇: http://t.csdnimg.cn/hvxmr 本章涉及的知识点: 宏和函数对比、命名约定、#undef、命令行定…