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

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

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

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

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

双指针算法,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文…

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

对于电动汽车这个新兴产业&#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 打…

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

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

FineBI实战项目一(3):Kettle实现ETL到数据仓库

目前&#xff0c;finebi_shop_bi 中是没有任何数据的&#xff0c;是一个空的数据库。而后续我们的所有数据分析都将在该数据库中进行。我们第一件事情就是要将 「finebi_shop」数据库中的所有表抽取到「finebi_shop_bi」数据库中。要抽取并装载数据到「finebi_shop_bi」中&…

CAN通信(报文测试)

问题&#xff1a;对安全模块的程序进行修改&#xff0c;将18串采样温度改成32串采样温度&#xff0c;相应can通信的帧数存在一定的变化&#xff0c;利用广成科技CANtest上位机软件或者内部上位机观察报文发送和接收情况。 1、内部上位机 内部上位机&#xff0c;设置相应的波特…

.pings勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 随着科技的发展&#xff0c;网络空间中的威胁也日益猖獗&#xff0c;其中之一就是勒索病毒&#xff0c;而.pings 勒索病毒则是其中的一种。本文将深入介绍.pings 勒索病毒的特征、恢复被其加密的数据文件的方法&#xff0c;并提供预防措施&#xff0c;以保障…

使用metricbeat 监控多ES集群

背景 ES 本身自带 监控&#xff0c;属于xpack 中的内容&#xff0c;为商业版&#xff0c;需要收费&#xff1b; 并且 monitor 功能必须要在security开启后才能使用&#xff0c;还有就是集群监控自己&#xff0c;将采集到的性能数据保存到本集群&#xff0c;这是一个比较差的设…

autodl学术加速

今天使用autodl加载预训练BERT模型失败&#xff0c;在官方文档里面找到了官方给的代理使用方法。 直接在bash输入&#xff1a; 开启学术加速&#xff1a; source /etc/network_turbo取消学术加速&#xff1a; unset http_proxy && unset https_proxy据说是只能访问这…

关键字、标志符、变量

1、关键字 1.1、定义 定义&#xff1a;被JAVA语言赋予了特殊含义&#xff0c;用作专门用途的字符串&#xff08;或单词&#xff09; 特点&#xff1a;全部关键字都是小写字母 上源码&#xff1a; 代码中定义类的关键字class&#xff0c;定义一个订单控制器类 ​​​​​​​…

【Unity美术】如何用3DsMax做一个水桶模型

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…