python学习笔记----异常、模块与包(九)

一、异常

1.1 什么是异常

  • 在Python中,异常是程序执行时发生的错误。当Python检测到一个错误时,它会引发一个异常,这可能是由于多种原因,如尝试除以零、访问不存在的文件,或者尝试从列表中获取不存在的索引等。
  • 异常处理是一种编程方法,用于预见并处理这些潜在的错误情况。它可以帮助程序在遇到错误时优雅地恢复,而不是完全中断执行。

1.2 异常的捕获(异常处理)

1.2.1 为什么要捕获异常

  • 世界上没有完美的程序,任何程序在运行的过程中,都可能出现异常,导致程序无法继续运行下去。
  • 我们要做的,不是力求程序完美运行,而是在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。
  • 这种行为我们称之为:异常处理(捕获异常)

1.2.1 捕获异常

语法:

try:可能发生错误的代码
except:如果出现异常要执行的代码
# 基本捕获
try:f = open("C:\\Users\\ABC\\Desktop\\example1.txt", "r", encoding="utf-8")
except:print("出现异常了,文件不存在,我将open的模式,改为w模式去打开")f = open("C:\\Users\\ABC\\Desktop\\example1.txt", "w", encoding="utf-8")# 捕获指定的异常
try:print(name)
except NameError as e:print("出新了变量未定义的异常")# 捕获多个异常
try:# 1/0print(name)
except (NameError, ZeroDivisionError) as e:print("出现了变量未定义或者除0的异常错误")# 捕获所有异常
try:f = open("C:\\Users\\ABC\\Desktop\\example1.txt", "r", encoding="utf-8")
except Exception as e:print()

1.2.2 异常else

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

1.2.3 异常的finally

  • finally表示的是无论是否异常都要执行的代码,例如关闭文件对象。
try:f = open("C:\\Users\\ABC\\Desktop\\example1.txt", "r", encoding="utf-8")
except:print("出现异常了,文件不存在,我将open的模式,改为w模式去打开")f = open("C:\\Users\\ABC\\Desktop\\example1.txt", "w", encoding="utf-8")
else:print("好高兴,没有异常")
finally:print("我是finally,有没有异常我都要执行")f.close()


1.3异常的传递

  • 异常传递是一个在程序中异常从发生点向上层代码传播的过程,直到被处理或导致程序终止。在 Python 中,如果一个函数中发生了异常而没有在该函数内部被捕获和处理,那么这个异常会被抛向该函数被调用的地方。如果在那里也没有被处理,异常继续向上传播,这个过程会持续进行,直到遇到一个处理该异常的 except 块,或者到达了程序的最顶层,导致程序终止。

示例:

def C():print("C() 开始执行")# 这里发生了一个除以零的异常x = 1 / 0print("C() 结束执行")  # 这行代码不会被执行def B():print("B() 开始执行")C()print("B() 结束执行")  # 如果异常没有在C中被处理,这行代码也不会被执行def A():print("A() 开始执行")try:B()except ZeroDivisionError:print("捕获到了一个除以零的异常")print("A() 结束执行")A()

解释:

  1. 当函数 C 中的代码 1 / 0 执行时,产生了一个 ZeroDivisionError 异常。
  2. 由于函数 C 内没有对异常进行处理,该异常被抛出到调用它的函数 B。
  3. 函数 B 也没有处理这个异常,因此异常继续向上传递到函数 A。
  4. 在函数 A 中,有一个 try...except 结构包围了对函数 B 的调用。这里的 except ZeroDivisionError 成功捕获了从 C 通过 B 传递来的异常。
  5. 一旦异常被捕获,程序继续执行 A 中 except 块后的代码。



二、python模块

2.1 什么是模块

  • 在 Python 中,模块是一个包含 Python 定义和声明的文件。模块的主要目的是帮助组织代码,并支持代码的重用性。每个 Python 文件(以 .py 结尾)都可以被视为一个模块,模块的名字与文件名相同。
  • 大白话:模块就是一个python文件,里面有类、函数、变量等,我们可以拿过来用(导入模块去使用)

2.2 模块的导入方式

语法:[from 模块名] improt [模块 | 类 | 变量 | 函数 | *] [as 别名]
常用的组合形式如:

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

示例:

# 使用import导入time模块(time.py)
import timeprint("开始")
time.sleep(5)
print("结束")
# 只导入time的sleep函数
from time import sleep
print("开始")
sleep(5)
print("结束")
# 导入time模块中所有的方法
from time import *
print("开始")
sleep(5)
print("结束")
# 给导入的time模块取别名
import time as t
print("开始")
t.sleep(5)
print("结束")
# 给导入的time模块中的sleep函数取别名
from time import sleep as sl
print("开始")
sl(5)
print("结束")


2.3 自定义模块

步骤 1: 创建模块

  • 我们可以创建一个名为 my_math.py 的文件,用于定义一些基本的数学运算函数。

my_math.py

# 定义一个加法函数
def add(x, y):return x + y# 定义一个减法函数
def subtract(x, y):return x - y# 定义一个乘法函数
def multiply(x, y):return x * y

步骤 2: 使用模块

  • 创建一个main.py 来使用my_math.py模块

main.py

import my_math# 使用 mymath 模块中的函数
result1 = my_math.add(10, 5)
print("10 + 5 =", result1)result2 = my_math.subtract(10, 5)
print("10 - 5 =", result2)result3 = my_math.multiply(10, 5)
print("10 * 5 =", result3)

步骤3:运行结果

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50


2.4 测试模块

  • 在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员可能会在模块中添加一些测试信息,例如下面的my_math.py模块

my_math.py

def add(x, y):return x + ydef sub(x, y):return x - y# 测试代码
print(add(1, 2))
print(sub(10, 5))
  • 此时在主文件main.py中调用my_math.py模块会出现测试代码也被执行的情况

main.py

import my_math# 使用 mymath 模块中的函数
result1 = my_math.add(10, 5)
print("10 + 5 =", result1)result2 = my_math.sub(10, 5)
print("10 - 5 =", result2)

运行结果:

3
5
10 + 5 = 15
10 - 5 = 5

解决方法

  • 在 Python 中,if __name__ == '__main__': 这一行经常用在脚本的最末尾。这行代码的目的是确定该 Python 文件是被直接运行的还是被导入到其他文件中作为模块使用。
  • __name__ 是 Python 中的一个内置变量。当 Python 脚本直接运行时,__name__ 被赋予值 '__main__'。如果该文件是被其他文件导入的,则 __name__ 被赋予其模块名(即文件名)。


我们可以在if __name__ == '__main__':的下方写测试代码解决这个问题

my_math.py

def add(x, y):return x + ydef sub(x, y):return x - yif __name__ == '__main__':print(add(1, 2))print(sub(10, 5))



2.5 __all__

  • 如果一个模块文件中有__all__变量,当使用from xxx import *导入该模块时,只能导入这个列表中的元素

例子:

my_math.py

__all__ = ['add', 'sub']def add(x, y):return x + ydef sub(x, y):return x - ydef mul(x, y):return x * y
  • 此时mul函数未导入,将无法使用
from my_math import *result1 = add(10, 5)
print("10 + 5 =", result1)result2 = sub(10, 5)
print("10 - 5 =", result2)# 报错
result3 = mul(5, 5)
print("5 * 5 =", result3)



二、python包

2.1 什么是python包

  • 从物理上看,包就是一个文件夹,在该文件夹下包含了一个__init__.py文件,该文件夹可以用于包含多个模块文件。
  • 从逻辑上看,包的本质依然是模块。
    在这里插入图片描述
  • 当我们的模块文件越来越多时,包可帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块

2.2 如何创建包

在这里插入图片描述
注意:新建包后,包的内部会自动创建__init__.py文件,这个文件控制着包的导入行为。



2.3 导入包

import 包名.模块名
# 使用
包名.模块名.方法
from 包名.模块名 import 方法


2.4 安装第三方包

2.4.1 什么是第三方包

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

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

由于是第三方的包,python没有内置,所以我们需要安装他们才可以导入使用

2.4.2 安装第三方包-pip

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

C++深度解析教程笔记7

C深度解析教程笔记7 第13课 - 进阶面向对象(上)类和对象小结 第14课 - 进阶面向对象(下)类之间的基本关系继承组合 类的表示法实验-类的继承 第15课 - 类与封装的概念实验-定义访问级别cmd 实验小结 第16课 - 类的真正形态实验-st…

【氮化镓】GaN器件可靠性及市场前景概述

文章是关于氮化镓(GaN)场效应晶体管(FET)技术在空间应用中的可靠性、辐射效应和市场前景的概述。文章由Airbus Defence & Space的多位专家撰写,涵盖了GaN FET技术的多个关键方面,包括技术概述、可靠性问…

reactjs后台管理系统搭建

1 通过yarn 模板创建reactjs项目 yarn create vite reactjs-antdesign-admin --template react-ts 2 基础路由测试 定义一个router/index.tsx&#xff0c;里面定义路由组件 const Router: React.FC () > {return (<HashRouter><Switch><Route path"…

免费开源语音克隆-GPT-SoVITS-WebUI只需 5 秒的声音样本

语音克隆-GPT-SoVITS-WebUI 强大的少样本语音转换与语音合成Web用户界面。 功能&#xff1a; 零样本文本到语音&#xff08;TTS&#xff09;&#xff1a; 输入 5 秒的声音样本&#xff0c;即刻体验文本到语音转换。 少样本 TTS&#xff1a; 仅需 1 分钟的训练数据即可微调模型…

【大模型应用】使用 Windows 窗体作为 Copilot 应用程序的 Ollama AI 前端(测试llava视觉问答)...

项目 “WinForm_Ollama_Copilot” 是一个使用Windows Forms作为前端的Ollama AI Copilot应用程序。这个项目的目的是提供一个用户界面(UI)&#xff0c;通过它&#xff0c;用户可以与Ollama AI进行交互。以下是该项目的一些关键特点和功能&#xff1a; Ollama Copilot: 这是一个…

Linux搭建mysql环境

搭建 MySQL 环境 1、使用 wget 下载安装包&#xff0c;下载到 opt 目录中 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm2、安装 MySQL 公钥 rpm -i mysql57-community-release-el7-10.noarch.rpmrpm --import https://repo.mysql.com/RPM-GP…

聊聊持续测试

这是鼎叔的第九十六篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 本人新书《无测试组织-测试团队的敏捷转型》已出版&#xff08;机械工业出版社&#xff09;。 如果在测试部门只能推行一个技术建设项目&#xff0c;那鼎叔就会选择“持续测试”。 持续测…

Android手写自己的路由SDK

实现自己的路由框架 ​ 在较大型的Android app中常会用到组件化技术&#xff0c;针对不同的业务/基础功能对模块进行划分&#xff0c;从上到下为壳工程、业务模块、基础模块。其中业务模块依赖基础模块&#xff0c;壳工程依赖业务模块。同级的横向模块&#xff08;比如多个业务…

第四课 communcation服务-can基础第一弹

根据nxp can开发白皮书&#xff0c;介绍s32k1系列芯片的can通信速率、外部晶振、同步段、传播段、相位段之间的关系。 1.Can通信基础概念: 通信速率&#xff1a;单位时间内可以传输的数据量 最小位时间:Tq&#xff08;Time Quantum&#xff0c;时间量子&#xff09;是CAN控制…

【Web】CTFSHOW 中期测评刷题记录(1)

目录 web486 web487 web488 web489 web490 web491 web492 web493 web494 web495 web496 web497 web498 web499 web500 web501 web502 web503 web505 web506 web507 web508 web509 web510 web486 扫目录 初始界面尝试文件包含index.php&am…

14.集合、常见的数据结构

集合 概念 Java中的集合就是一个容器&#xff0c;用来存放Java对象。 集合在存放对象的时候&#xff0c;不同的容器&#xff0c;存放的方法实现是不一样的&#xff0c; Java中将这些不同实现的容器&#xff0c;往上抽取就形成了Java的集合体系。 Java集合中的根接口&#x…

B+树详解与实现

B树详解与实现 一、引言二、B树的定义三、B树的插入四、B树的删除五、B树的查找效率六、B树与B树的区别和联系 一、引言 B树是一种树数据结构&#xff0c;通常用于数据库和操作系统的文件系统中。它的特点是能够保持数据稳定有序&#xff0c;其插入与修改拥有较稳定的对数时间…

RoNID:通过生成可靠标签与聚类友好型表征来实现新意图的发现

论文地址&#xff1a;https://arxiv.org/abs/2404.08977 原文地址&#xff1a;intents-are-not-going-away-ronid-is-a-new-intent-discovery-framework 2024 年 4 月 26 日 Robust New Intent Discovery&#xff08;RoNID&#xff09;框架致力于在开放域场景中识别已知意图并合…

使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境

文章目录 概述安装Android Studio编译源码使用Android Studio打开源码制作ipr文件直接编译成功后自动打开Android Studio 修改SystemUI验证开发环境 概述 我们都知道Android的系统源码量非常之大&#xff0c;大致有frameworka层源码&#xff0c;硬件层(HAL)源码&#xff0c;内…

yudao-cloud微服务系统系统模块+后台管理系统成功运行

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列文章目录 第一章 芋…

c# winform快速建websocket服务器源码 wpf快速搭建websocket服务 c#简单建立websocket服务 websocket快速搭建

完整源码下载----->点击 随着互联网技术的飞速发展&#xff0c;实时交互和数据推送已成为众多应用的核心需求。传统的HTTP协议&#xff0c;基于请求-响应模型&#xff0c;无法满足现代Web应用对低延迟、双向通信的高标准要求。在此背景下&#xff0c;WebSocket协议应运而生…

分享自己一篇在亚马逊云科技AWS官网发的Blog技术文章

小李哥在亚马逊AWS官网&#xff0c;作为第一作者发了自己的第一篇AWS Blog文章&#xff0c;也是自己今年在AWS官网的第11篇文章。文章主要内容是描述为出海的金融企业&#xff0c;搭建满足PCI-DSS合规、FIPS 140-2 Level 3安全标准的传输中数据加密云端方案&#xff0c;主要用于…

Mac环境下ollama部署和体验

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 关于ollama ollama和LLM&#xff08;大型语言模型&#xff09;的关系&#xff0c;类似于docker和镜像&#xff0c;可以在ollama服务中管理和运行各种LLM&…

C语言/数据结构——每日一题(反转链表)

一.前言 大家好&#xff01;今天又是每日一题环节。今天我为大家分享了一道单链表题——反转链表。 废话不多说&#xff0c;让我们直接进入正题吧。 二.正文 1.1题目信息 这是一道leetCode上面的一道题&#xff1a;https://leetcode.cn/problems/reverse-linked-list 1.2解…

【跟马少平老师学AI】-【神经网络是怎么实现的】(九)长短期记忆网络

一句话归纳&#xff1a; 1&#xff09;RNN也会存在梯度消失的问题。 2&#xff09;同一句话&#xff0c;对于不同的任务&#xff0c;句中不同的词起的作用也不一样。 3&#xff09;LSTM&#xff08;长短期记忆&#xff09;子网络&#xff1a; 门&#xff0c;让输入经过运算&…