python基础----07-----异常、模块、包

news/2024/11/24 13:54:16/

一 了解异常

当检测到一个错误时,Python解释 器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”,也就是我们常说的BUG。

二 异常的捕获

当我们的程序遇到了BUG,那么接下来有两种情况:
①整个程序因为一个BUG停止运行。
②对BUG进行提醒,整个程序继续运行中。

显然在之前的学习中,我们所有的程序遇到BUG就会出现①的这种情况,也就是整个程序直接奔溃。
但是在真实工作中,我们肯定不能因为一个小的BUG就让整个程序全部奔溃,也就是我们希望的是达到②的这种情况。
那这里我们就需要使用到捕获异常。
捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。

基本语法:

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

2.1 捕获单个异常

if __name__ == '__main__':try:print(name)except NameError as e:print("出现了变量未定义的异常")print(e)

在这里插入图片描述

2.2 捕获多个异常

if __name__ == '__main__':try:print(name)#print(1/0)except (NameError, ZeroDivisionError):# 元组print('变量未定义或者ZeroDivision错误...')

注释print(name)或者print(1/0),结果都一样。
在这里插入图片描述

2.3 捕获所有异常

写法1:
但是这种我们无法得到对应的异常问题,只能根据自己的打印来判断异常的类型。

if __name__ == '__main__':try:print(name)#print(1/0)except:print("出现异常了")

写法2(这种比较常用):

if __name__ == '__main__':try:print(name)#print(1/0)except Exception as e:print(e)

这里异常的原因被记录在e中,所以我们只需要打印异常对象e即可。
在这里插入图片描述

2.4 异常else和finally

实际上异常的全部语法是:

try:可能发生错误的代码
except:如果出现异常执行的代码
else没有出现异常执行的代码
finally不管有没有异常,都会执行的代码

案例。

if __name__ == '__main__':try:# 模拟异常,以只读打开一个不存在的文件f = open("111abc.txt", "r", encoding="UTF-8")except Exception as e:print("出现异常了")print(e)# 出现异常时正确的打开方式。f = open("111abc.txt", "w", encoding="UTF-8")else:print("好高兴,没有异常")finally:print("我是finally,不管有没有异常,我都会执行")f.close()

在这里插入图片描述

三 异常的传递性

在这里插入图片描述

四 模块的概念和导入

模块就是一个Python文件,里面有类、函数、变量等,我们可以拿过来用(导入模块去使用)。

模块的导入方式:
导入的语法如下:

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

常用的组合形式如:

import 模块名
from 模块名 import 类、变量、方法等
from 模块名 import *
import 模块名 as别名.
from 模块名 import 功能名 as 别名
if __name__ == '__main__':# 1. 使用import导入time模块使用sleep功能(函数)# import time# 导入Python内置的time模块(time. py这个代码文件)# print("你好")# time.sleep(5)# 通过time.xxx就可以使用模块内部的全部功能(类、 函数、变量)# print("我好")# 2. 使用from导入time的sleep功能(函数)# 这种只能使用sleep这种方法,并且不需要加上"time."前缀# from time import sleep## print("你好")# sleep(5)# print("我好")# 3. 使用 * 导入time模块的全部功能# *实际是导入了一个__all__变量的内容,不修改该变量默认导入所有# from time import *# # *表示全部的意思# print("你好")# sleep(1)# print("我好")# 4. 使用as给特定功能加上别名.# 这种只是给模块起了别名import time as tprint("你好")t.sleep(1)print("我好")

五 自定义模块并导入

在这里插入图片描述

再同级文件下创建my_modle1.py。
在这里插入图片描述

#my_modle1.py
def add(a,b):print(a+b)

在main.py中写如下:

if __name__ == '__main__':# import my_modle1# my_modle1.add(1,2)# from my_modle1 import add# add(1,2)from my_modle1 import add as asdfasdasdasdfasdasd(1, 2)

在这里插入图片描述

注意事项:
1)引入多个模块存在同样的函数名的问题:
如果有两个模块(引入别人的),分别是模块1,模块2,都有同样的函数名my_test(a, b),当在自己的模块(称为模块3)import了模块1和模块2,那么my_test是使用最后导入的那个模块的函数,因为在python会覆盖。例如下图,模块2的my_test在后面导入,所以my_test(1, 1)调用的是模块2的函数。

在这里插入图片描述

2)测试模块问题:
解决方法看下图。原因是当你运行某个模块,只有运行的那个模块的__name__的值才是__main__,而通过导入的方式不符合该条件。
在这里插入图片描述

3)__all__变量:
每个模块文件都有一个__all__变量,当使用"from xxx import *“导入时,这个” * "实际上就是__all__变量的内容,我们可以通过修改__all__变量去限制外部能调用该模块的函数。
在这里插入图片描述

六 自定义Python包

什么是Python包?
从物理上看,包就是一个文件夹,在该文件夹下包含了一个__init__ .py 文件,该文件夹可用于包含多个模块文件
从逻辑上看,包的本质依然是模块。
在这里插入图片描述

包的作用:
当我们的模块文件越来越多时,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块。
你可以认为__init__.py是一个标志,当你创建一堆文件放到文件夹中,不放入__init__.py,他就是装着各种.py的文件夹。如果包含__init__.py,说明该文件夹是一个包!

下面我们开启自定义python包。

  1. 创建包文件夹。右击项目目录(我的是Py)->New->Python Package。
    在这里插入图片描述
    名字随便,我这里是my_package。
    在这里插入图片描述
    在my_package包添加两个模块文件,my_module1.py、my_module2.py。
    在这里插入图片描述

在mian.py添加:

# 大家也可以按照自己喜欢的方式进行导入包
import my_package.my_module1
import my_package.my_module2if __name__ == '__main__':my_package.my_module1.print1()my_package.my_module2.print2()

运行main.py:
在这里插入图片描述

七 安装第三方包

我们知道,包可以包含一堆 的Python模块,而每个模块又内含许多的功能。
所以,我们可以认为:一个包,就是一堆同类型功能的集合体。
在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:

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

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

第三方包的安装非常简单,我们只需要使用Python内置的pip程序即可。
打开我们许久未见的:命令提示符程序,在里面输入:

pip install 包名称

例如:

# 注意不要进python环境,是直接在cmd运行即可。
# -i 是使用国内的清华源进行加速。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

在pycharm内安装第三方包:
打开设置。
在这里插入图片描述
在这里插入图片描述
安装成功会有提示。
在这里插入图片描述


http://www.ppmy.cn/news/276793.html

相关文章

AcWing算法提高课-1.3.14开心的金明

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 金明今天很开心&#xff0c;家里购置的新房就要领钥匙了&#xff0c;新房里有一间他自己专用的很宽敞的房间。 更让他高兴的是&…

tr(AB) = tr(BA)

证明 t r ( A B ) t r ( B A ) tr(AB) tr(BA) tr(AB)tr(BA)&#xff0c;其中 A A A 和 B B B 是两个矩阵, A A A 与 B T B^T BT 的尺寸相同&#xff0c;我们可以使用矩阵迹的性质和矩阵乘法的定义。 假设 A A A 是一个 m n m \times n mn 的矩阵&#xff0c; B B B …

如何实现企业微信扫码登录?

开发内容&#xff1a;实现网页企业微信扫码登录 企业微信提供了OAuth的授权登录方式&#xff0c;可以让从企业微信终端打开的网页获取成员的身份信息&#xff0c;从而免去登录的环节。 企业应用中的URL链接&#xff08;包括自定义菜单或者消息中的链接&#xff09;&#xff0c…

力扣算法学习day31-3

文章目录 力扣算法学习day31-3213-打家劫舍 II题目代码实现 力扣算法学习day31-3 213-打家劫舍 II 题目 代码实现 class Solution {public int rob(int[] nums) {if(nums.length 1){return nums[0];}// dp// 思路&#xff1a;本题是在打家劫舍I的特殊版本&#xff0c;因为环…

『尼罗河魅影之谜』的故事模式与推理内核

『尼罗河魅影之谜』的故事模式与推理内核【推理小说笔记1】 读完了林斯谚的『尼罗河魅影之谜』&#xff0c;据说是林斯谚的长篇小说处女作。这是一个没有谋杀的日常推理作品&#xff0c;虽然也许是作者考虑到太过低筹码的推理游戏会使整个事件的趣味性和代入性大打折扣&#xf…

循环练习和列表基础

循环练习和列表基础 使用for和while循环输出 0~100 内所有3 的倍数 for x in range(0, 100, 3):print(x)num 0 while True:prin(num)num 3if num > 100:breaknum 3 while num < 100:print(num)num 3使用for和while循环输出100~200内个位数或者十位数能被3整除的数…

python 爬电影名网址评分及导演代码和运行结果

目录 代码&#xff1a; 运行结果&#xff1a; 代码&#xff1a; #!/usr/bin/env python3 # -*- coding: utf-8 -*- from lxml import etree import requests import csvout open(电影名网址评分及导演.csv, a, newline) csv_write csv.writer(out, dialectexcel) for a in r…

V for Vendetta

V for Vendetta V字仇杀队 复仇者V 安迪沃卓斯基 and Larry Wachowski 思想&#xff0c;是最强大的武器。因为&#xff0c;世界上的独裁政府&#xff0c;有一个共同特点就是推行洗脑和愚民政策。 经典台词&#xff1a; We are told to remember the idea,not the man. Because …