Python笔记07-异常、模块和包

文章目录

  • 异常及捕获方法
  • python模块
  • python包
  • 安装第三方包

异常及捕获方法

当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”, 也就是我们常说的BUG
例如:以r方式打开一个不存在的文件。

C:\Users\eric>python
Python 3.11.5 (tags/v3.11.5:cce6ba9, Aug 24 2023, 14:38:34) [MSC v.1936 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('linux.txt', 'r')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'linux.txt'

世界上没有完美的程序,任何程序在运行的过程中,都有可能出现:异常,也就是出现bug导致程序无法完美运行下去。
我们要做的,不是力求程序完美运行。
而是在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。
这种行为我们称之为:异常处理(捕获异常)
捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。

捕获异常语法

try:可能发生错误的代码
except:如果出现异常执行的代码
try:f = open('linux.txt', 'r')
except:f = open('linux.txt', 'w')

捕获指定类型异常

try:print(name)
except NameError as e:print('name变量名称未定义错误')

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

捕获多个异常
当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写

try:print(1/0)
except (NameError, ZeroDivisionError):print('ZeroDivision错误...')

捕获异常并输出描述信息

try:print(num)
except (NameError, ZeroDivisionError) as e:print(e)

捕获所有异常

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

异常else
else表示的是如果没有异常要执行的代码

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

异常的finally
finally表示的是无论是否异常都要执行的代码,例如关闭文件。

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

异常的传递

异常是具有传递性的
当函数func01中发生异常, 并且没有捕获处理这个异常的时候, 异常
会传递到函数func02, 当func02也没有捕获处理这个异常的时候
main函数会捕获这个异常, 这就是异常的传递性.
提示:
当所有函数都没有捕获异常的时候, 程序就会报错
在这里插入图片描述

python模块

什么是模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾. 模块能定义函数,类和变量,模块里也能包含可执行的代码.
模块的作用: python中有很多各种不同的模块, 每一个模块都可以帮助我们快速的实现一些功能, 比如实现和时间相关的功能就可以使用time模块
我们可以认为一个模块就是一个工具包, 每一个工具包中都有各种不同的工具供我们使用进而实现各种不同的功能.
大白话:模块就是一个Python文件,里面有类、函数、变量等,我们可以拿过来用(导入模块去使用)

模块的导入方式

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

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

常用的组合形式如:
import 模块名
from 模块名 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名

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

as定义别名

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

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

import my_module1
my_module1.test(1,2)

在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,
这个开发人员会自行在py文件中添加一些测试信息,例如,在my_module1.py文件中添加测试代码test(1,1)

def test(a, b):print(a + b)
test(1, 1)

解决办法

def test(a, b):print(a + b)
# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行test函数调用
if __name__ == '__main__':test (1, 1)

注意: 每个Python文件都可以作为一个模块,模块的名字就是文件的名字. 也就是说自定义模块名必须要符合标识符命名规则
当导入多个模块的时候,且模块内有同名功能. 当调用这个同名功能的时候,调用到的是后面导入的模块的功能

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

python包

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

包的作用: 当我们的模块文件越来越多时,包可以帮助我们管理这些模块, 包的作用就是包含多个模块,但包的本质依然是模块

自定义包
① 新建包my_package
② 新建包内模块:my_module1my_module2
③ 模块内代码如下
在这里插入图片描述
导入包
方式1

from my_pack import my_module1
from my_pack import my_module2
my_module1.test(1, 2)
my_module2.test(1, 2)

方式2
必须在__init__.py文件中添加__all__ = [],控制允许导入的模块列表
在这里插入图片描述

from my_pack import *
my_module2.test(1,2)

__all__针对的是 ’ from … import * ‘ 这种方式 对 ‘ import xxx ’ 这种方式无效

安装第三方包

我们知道,包可以包含一堆的Python模块,而每个模块又内含许多的功能。
所以,我们可以认为:一个包,就是一堆同类型功能的集合体。
在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:
科学计算中常用的:numpy包
数据分析中常用的:pandas包
大数据计算中常用的:pyspark、apache-flink包
图形可视化常用的:matplotlib、pyecharts
人工智能常用的:tensorflow

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

安装第三方包 - pip
第三方包的安装非常简单,我们只需要使用Python内置的pip程序即可。
打开我们许久未见的:命令提示符程序,在里面输入:
pip install 包名称
即可通过网络快速安装第三方包
在这里插入图片描述

pip的网络优化

由于pip是连接的国外的网站进行包的下载,所以有的时候会速度很慢。
我们可以通过如下命令,让其连接国内的网站进行包的安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
https://pypi.tuna.tsinghua.edu.cn/simple 是清华大学提供的一个网站,可供pip程序下载第三方包

PyCharm安装第三方包
工具右下角点击
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

LNMP架构及应用部署

目录 简介 1、构建LNMP网站平台 1.1、安装MySQL数据库 &#xff08;1&#xff09;编译安装MySQL &#xff08;2&#xff09;优化调整 &#xff08;3&#xff09;初始化数据库 &#xff08;4&#xff09;启动mysql服务 1.2、安装PHP解析环境 &#xff08;1&#xf…

【pytorch学习】 深度学习 教程 and 实战

pytorch编程实战博主&#xff1a;https://github.com/lucidrains https://github.com/lucidrains/vit-pytorch

K8S-环境部署

1 基础环境配置 主机名规划 序号主机ip主机名规划110.0.0.12kubernetes-master.sswang.com kubernetes-master210.0.0.15kubernetes-node1.sswang.com kubernetes-node1310.0.0.16kubernetes-node2.sswang.com kubernetes-node2410.0.0.17kubernetes-node3.sswang.com kubern…

【Java】设计模式之两阶段终止

两阶段终止 两阶段终止&#xff0c;即Two Phase Termination。是用来终止线程的套路。 它的思想是&#xff0c;如何在一个线程T1中优雅地终止线程T2&#xff1f;这里的【优雅】指的是给T2一个料理后事的机会。 错误思路&#xff1a; 使用stop方法。stop 方法会真正杀死线程…

uniapp上传文件时用到的api是什么?格式是什么?

在UniApp中&#xff0c;你可以使用uni.uploadFile()方法来上传文件。这是一个异步方法&#xff0c;用于将本地资源上传到服务器。 该方法的基本格式如下&#xff1a; uni.uploadFile({url: 上传接口地址,filePath: 要上传的文件路径,name: 后端接收的文件参数名,formData: {/…

58. 最后一个单词的长度(Java)

题目描述 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 输入&#xff1a; s “luffy is still joyboy” 输出&#xff1a; 6 解释&am…

[足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-1 坐标系与概念基准

本文仅供学习使用&#xff0c;总结很多本现有讲述运动学或动力学书籍后的总结&#xff0c;从矢量的角度进行分析&#xff0c;方法比较传统&#xff0c;但更易理解&#xff0c;并且现有的看似抽象方法&#xff0c;两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…

“华为杯“第十三届中国研究生数学建模竞赛-A题:关于跳台跳水体型系数设置的建模分析(续)

目录 5.4.1 问题分析与建模 5.4.2 计算与求解 5.5 结论 5.5.2 当空中存在两个动作时

双指针算法,python求解给定数组的三数之和问题

对于双指针算法&#xff0c;一般是用于解决对数组等数据结构进行遍历的问题的一种编程思路&#xff0c;其主要是使用两个指针共同配合工作&#xff0c;对数组等数据结构进行搜索并返回得到想要搜索的结果&#xff0c;针对给定问题&#xff0c;三数之和问题&#xff0c;这是一个…

Java集合框架深度解析:HashSet

Java集合框架是Java编程中不可或缺的一部分&#xff0c;提供了丰富的数据结构和算法&#xff0c;以支持各种场景下的数据存储和操作。在这个系列的深度解析中&#xff0c;我们将聚焦于其中之一的**HashSet**&#xff0c;深入了解它的实现原理、使用场景、可能遇到的问题以及并发…

Vue实现加减法验证码

引入Vue.js 在HTML文件的<head>标签中引入Vue.js的CDN链接&#xff1a; <script src"https://cdn.jsdelivr.net/npm/vue2.6.11/dist/vue.min.js"></script>创建Vue实例 接下来&#xff0c;我们要创建一个Vue实例&#xff0c;并将其挂载到HTML文…

HTTP一些状态码的记录

首先先理解一下什么是HTTP,HTTP&#xff08;超文本传输协议&#xff09;是一个简单的请求-响应协议&#xff0c;通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。 从100开始到500的一些状态码 一&#xff0c;1xx&#xff08;信息性状态…

特斯拉难挽倒退?比亚迪为中国汽车市场改写历史

对于电动汽车这个新兴产业&#xff0c;特斯拉长期以来一直处于领头羊的位置&#xff0c;近年来也面临诸多测试。去年底欧洲报道特斯拉在瑞典遭遇罢工冲击&#xff0c;运营陷入诸多困扰&#xff0c;实在出人意料。更让人讶异的是&#xff0c;年终宣布新王者比亚迪在全球销量首次…

图表分析网页模版 大数据可视化大屏电子沙盘合集

项目基于html/css/js&#xff0c;包含行业&#xff1a; 智慧政务 智慧社区 金融行业 智慧交通 智慧门店 智慧大厅 智慧物流 智慧医疗 通用模板 大数据分析平台 项目包含功能 (部分)&#xff1a; 实时数据K线图&#xff08;可自由配置多种行业模式&#xff09; 可切换式大屏展…

私有仓库Gogs搭建(docker环境)

文章目录 环境准备Gogs简介MYSQL(docker) 搭建gogs(docker) 部署gogs初始化配置配置管理员信息仓库创建项目代码上传仓库 环境准备 本地环境安装git,参考Git分布式版本控制工具学习管理面板1panel&#xff0c;安装参考Armbian安装1panel教程服务器docker环境&#xff08;如果使…

Spring Boot 基础知识点1 (含面试题1)

Spring Boot 是一款基于 Spring 框架的开源应用程序开发工具&#xff0c;它旨在简化 Spring 应用程序的配置和开发过程。Spring Boot 提供了一种简单的方式来创建可独立运行的、生产级别的应用程序&#xff0c;并在需要时进行部署。Spring Boot 在微服务架构和云计算环境下得到…

【树莓派安装Homeassistant及基本配置】

【树莓派安装Homeassistant及基本配置】 前言1. 树莓派安装Homeassistant1.1 建议的硬件1.2 安装家庭助理操作系统1.2.1 将映像写入 SD 卡1.2.2 如果需要WiFi连接1.2.3 访问家庭助理 1.3 配置环境1.3.1 创建账号1.3.2 设置位置1.3.3 设置国家1.3.3 数据设置 1.4 更新系统1.5 打…

人类智能中含有不同态、势、感、知的混合微积分

人类智能中包含了不同态、势、感、知的混合微积分。在混合微积分中&#xff0c;不同态代表了人类在不同的状态下对问题的思考和处理能力&#xff0c;势代表了人类在不同的动机和目标驱动下的行为表现&#xff0c;感代表了人类对问题的感觉和理解反应&#xff0c;知代表了人类对…

COCO数据格式的json文件内容

COCO(Common Objects in Context)数据集现在有3种标注类型:object instances(目标实例), object keypoints(目标上的关键点), 和image captions(看图说话),使用JSON文件存储,包含了对图像中目标的边界框、类别标签、分割掩码等信息。 COCO标注文件是一个包含多个字…

【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数

这是在实际中遇到的很简单的但却关系到习惯养成的问题&#xff0c;所以想拿出来单独讲一下 问题描述 实际中看到大部分人给出的代码是这样的 常见的写法 #include<stdio.h> int main() {int a,b,c;scanf("%d %d d%",&a,&b,&c);printf("%d\n…