6-python异常、错误、模块、包

2023-11-16

1.异常

打开一个不存在的文件会引发异常
FileNotFoundError: [Errno 2] No such file or directory: ‘D:/不存在的文件.txt’

f=open(file="D:/不存在的文件.txt",mode="r", encoding='utf-8')
print(f.read())

(1)异常捕获
可以使用异常捕获,使程序正常执行

在这里插入图片描述

try:
    f=open(file="D:/不存在的文件.txt",mode="r", encoding='utf-8')
except:
    print("文件不存在") # 输出:文件不存在

捕获所有异常
法一

try:
    1/0 # 可替换为其他异常
except:
    print("捕获到了异常") # 捕获到了异常

法二

try:
    1/0 # 可替换为其他异常
except Exception as x:
    print(x) # division by zero
    print("捕获到了异常") # 捕获到了异常

(2)捕获指定异常
异常的种类有很多,如 FileNotFoundError、NameError、ValueError、ZeroDivisionError

print(x) # NameError: name 'x' is not defined

a="str"
i=int(a) # ValueError: invalid literal for int() with base 10: 'str'

print(1/0) # ZeroDivisionError: division by zero

因此可以根据异常类型进行捕获

try:
    print(x)
except NameError as y: # 定义任意变量y用于接收错误信息
    print(y) # name 'x' is not defined
    print("这是NameError异常") # 这是NameError异常

(3)多个except子句
一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。

如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略,即最多只有一个分支会被执行。

如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。

以下程序只会输出:This is NameError

try:
    print(x)  # NameError: name 'x' is not defined(非输出)

    a = "str"
    i = int(a)  # ValueError: invalid literal for int() with base 10: 'str'(非输出)

    print(1 / 0)  # ZeroDivisionError: division by zero(非输出)

except NameError as n:
    print("This is NameError")
except ValueError as v:
    print("This is ValueError")
except ZeroDivisionError as z:
    print("This is ZeroDivisionError")

(4)raise抛出异常
可以使用raise在输出指定语句后继续抛出异常

在这里插入图片描述

若raise加在非第一个抛出的异常的except中,则不会抛出异常

在这里插入图片描述

抛出指定异常

x=5
if x>3:
    raise Exception("引发了异常,x比3大了")

在这里插入图片描述

(5)同时处理多个异常
一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。在try语句中,有一个满足元组内的异常就会执行except语句。

try:
    print(1 / 0)
except (NameError,ValueError,ZeroDivisionError) as nvz:
    print(nvz) # division by zero
    print("NameError/ValueError/ZeroDivisionError") # NameError/ValueError/ZeroDivisionError

(6)try/except…else
else 必须放在所有的 except 子句之后

在这里插入图片描述

try:
    print(1/0)
except:
    print("引发了异常")
else:
    print("继续执行")
# 输出: 引发了异常
try:
    print(1/5)
except:
    print("引发了异常")
else:
    print("继续执行")
"""
0.2
继续执行
"""

(7)try-finally 语句
无论是否发生异常都要执行finally

在这里插入图片描述
(8)异常的传递性
在主函数中调用了f2,f2又调用了f1。在f1中引发了异常,返回f2,再返回主函数,我们可以在主函数位置处理异常(except),这就是异常的传递性

def f1():
    print("this is f1")
    num=1/0
    print("f1 end")
def f2():
    print("this is f2")
    f1()
    print("f2 end")
def main():
    try:
        f2()
    except Exception as e:
        print(e)
main() # 调用

"""
this is f2
this is f1
division by zero
"""

2.错误

错误一般指语法错误/解析错

如下是if语句没有加冒号的错误。语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个箭头。

x=6
if x>5
    print(1)

在这里插入图片描述

3.模块

(1)导入整个time模块,包含其中的全部方法

import time
time.sleep(5) # 程序暂停5秒
from time import * 
sleep(5) # 程序暂停5秒

(2)仅导入time的sleep方法

from time import sleep 
sleep(5) # 程序暂停5秒

(3)别名

import time as t
t.sleep(5) # 程序暂停5秒
from time import sleep as t2
t2(5) # 程序暂停5秒

(4)自定义模块
①如下是一个加法函数及调用

def add(a,b):
    print(a+b)
add(2,3) # 5

可以将其改为模块
新建module文件

在这里插入图片描述

写入函数代码

在这里插入图片描述

在主函数中导入模块,即可使用

在这里插入图片描述

②当多个同名函数被调用时,后者会覆盖前者

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

调用module46的减法操作,输出:-1

在这里插入图片描述

③导入模块时会默认执行模块内容

在这里插入图片描述

输出:1
在这里插入图片描述

④导入模块时如果不希望执行模块部分内容

在模块内直接运行时会输出
在这里插入图片描述
而在被导入时不会输出任何内容
原理:在模块内运行时,当前模块视为main函数(即name=main),if判断成立,会执行print语句。当被导入时(相当于调用),name变为module45.py(而不再是main),if判断不成立,不会执行print的语句

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

⑤通过__all__控制import *

通过from module45 import * 可以调用module45.py中的所有的内容
但在module45.py中可以通过列表对 * 的访问进行限制,即重新说明 * 可访问的范围

[例]
module45.py

__all__ = ["f1"] # 只允许调用f1,f2访问不到

def f1():
    print(1)
def f2():
    print(2)
print(3)
if __name__ == "__main__":
    print(4)

main.py

from module45 import *
f1()
f2()

(运行main时)输出:
3
1

首先输出3,在import导入时就会执行
if语句判断不成立,不会输出4
调用f1时属于all声明的内容,可以正常调用,输出1
调用f2时会有如下异常

在这里插入图片描述

4.包

包类似于文件夹,可以包含多个py文件
(选择Python软件包/Python Package)
在这里插入图片描述
在这里插入图片描述

(1)包的导入
在包中有一个加法操作
在这里插入图片描述

导入:import 包名.模块名
调用:包名.模块名.方法名

在这里插入图片描述

(2)使用from导入及调用
导入:from 包 import 模块
调用:模块.方法

from nihao import module
module.add(2,3) # 5

(3)指定功能导入
导入:from 包.模块 import 方法
调用:方法

from nihao.module import add
add(2,3) # 5

(4)使用all控制 *

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

(init文件时默认创建的,用来标识这个文件夹是一个包)
在init中使用all限制 *
这里只允许导入包中的module模块

在这里插入图片描述
*默认导入包中的全部模块

在这里插入图片描述

输出:

在这里插入图片描述

(5)第三方包

在这里插入图片描述
【安装方式一】
以安装numpy包为例

命令提示符输入

pip install numpy

在这里插入图片描述

如果下载速度过慢可尝试以下方法

在这里插入图片描述
导包没有安装提示视为安装成功
在这里插入图片描述
【安装方式二】
在PyCharm的设置中进行安装
在这里插入图片描述
在这里插入图片描述
如果安装速度慢可尝试以下方法
在这里插入图片描述
在这里插入图片描述

[综合练习]

在这里插入图片描述

[解]

在这里插入图片描述

str_util.py

def str_reverse(s):
    return s[::-1]
def substr(s,x,y):
    return s[x:y]

file_util.py

def print_file_info(file_name):
    f=None
    try:
        f=open(file_name,"r",encoding="UTF-8")
    except Exception as e:
        print(f"文件不存在,异常原因为:{e}")
    else:
        print(f.read())
    finally:
        if f:
            f.close() # 如果不要求使用finally,可以将close放到else中
def append_to_file(file_name,data):
    f=open(file_name,"a",encoding="UTF-8")
    f.write(data)
    f.close() # close带有flush功能

main.py (任意测试数据)

from my_utils import str_util
from my_utils import file_util
print(str_util.str_reverse("hello"))
print(str_util.substr("hello",0,3))
file_util.print_file_info("D:/ceshi.txt")
file_util.append_to_file("D:/ceshi.txt","hehe")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

6-python异常、错误、模块、包 的相关文章

  • 用于查找列表/集合中唯一元素的代码

    根据上面阴影部分的面积应该代表 A XOR B XOR C XOR A AND B AND C 如何将其翻译成Python代码 代码必须与上述表达式中提供的集合操作密切相关 至少这是首选 该代码必须足够通用 能够处理 3 个以上的列表 UP
  • 如何使 Django ManyToMany “直通”查询更加高效?

    我使用的是 ManyToManyField 和 through 类 这会在获取事物列表时产生大量查询 我想知道是否有更有效的方法 例如 这里有一些描述书籍及其几位作者的简化类 它们通过角色类 定义 编辑器 插画家 等角色 class Per
  • 合并数据框中的值以写入 Excel

    我有一个看起来像的数据框 column1 column2 column3 colum4 column5 1 r n 1 r s 1 r n 2 r s 3 r n 3 2 r n 1 r s 1 r n 4 r s 4 r n 5 3 r
  • [python]没有属性“TessBaseAPI”

    当我编译代码时出现错误 import tessercat api tesseract TessBaseAPI 错误是 AttributeError 模块 对象没有属性 TessBaseAPI 我已经安装了tesseract via pip
  • Python 列表理解不适用于 itertools.groupby 解码

    我正在尝试解码结果itertools groupby到一个值列表中 我的来源是 x 1 2 2 1 6 3 6 5 1 3 最初的方法是使用 for 语句来实现 如下所示 keyfunc itemgetter 0 groups unique
  • S3 选择检索 CSV 中的标头

    我尝试使用以下代码从存储在 S 存储桶中的 CSV 中获取记录子集 s3 boto3 client s3 bucket bucket file name file sql stmt SELECT S FROM s3object S LIMI
  • 使用Python进行图像识别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个想法 就是我想识别图像中的字母 可能是 bmp或 jpg 例如 这是一个包含字母 S 的 bmp 图像 我想做的是使用Pyth
  • 将分布拟合到直方图

    I want to know the distribution of my data points so first I plotted the histogram of my data My histogram looks like th
  • 比较两个文本文件并计算差异

    我一直在尝试在Python中比较两个文本文件 本质上我想打开它们并一次比较一个字符 如果字符不同 则向计数器添加1 然后显示该值 这是我到目前为止所拥有的 usr bin env python diff 0 import random im
  • 什么时候用==,什么时候用is?

    奇怪的是 gt gt gt a 123 gt gt gt b 123 gt gt gt a is b True gt gt gt a 123 gt gt gt b 123 gt gt gt a is b False Seems a is b
  • 如何将一串Python代码编译成一个可以调用函数的模块?

    在 Python 中 我有一串 Python 源代码 其中包含以下函数 mySrc def foo print foo def bar print bar 我想将这个字符串编译成某种形式类似模块的对象这样我就可以调用代码中包含的函数 这是我
  • 获取 HTML 代码的结构

    我正在使用 BeautifulSoup4 我很好奇是否有一个函数可以返回 HTML 代码的结构 有序标签 这是一个例子 h1 Simple example h1 p This is a simple example of html page
  • Bottle 是否可以处理没有并发的请求?

    起初 我认为 Bottle 会并发处理请求 所以我编写了如下测试代码 import json from bottle import Bottle run request response get post import time app B
  • Python `concurrent.futures`:根据完成顺序迭代 future

    我想要类似的东西executor map 除了当我迭代结果时 我想根据完成的顺序迭代它们 例如首先完成的工作项应该首先出现在迭代中 等等 这样 当且仅当序列中的每个工作项尚未完成时 迭代就会阻塞 我知道如何使用队列自己实现这一点 但我想知道
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 无法在 Windows 服务器上使 SVN 预提交脚本失败

    我正在编写一个 SVN pre commit bat 文件 该文件调用 Python 脚本来查询我们的问题跟踪系统 以确定用户提供的问题跟踪 ID 是否处于正确的状态 例如 打开 状态 并与正确的关联项目 SVN 服务器运行 Windows
  • Python中的MariaDB连接器无法连接到远程服务器

    我使用与远程 Mariadb 服务器的连接已有几个月了 今天 无法再通过 macOS 上的 python mariadb 模块和 mariadb 连接器建立连接 基本安装如下 brew install mariadb connector c
  • Matplotlib 渲染日期、图像的问题

    我在使用 conda forge 的 Matplotlib v 3 1 3 和 python 3 7 时遇到问题 我拥有 Matplotlib 所需的所有依赖项 当我输入这段代码时 它应该可以工作 我得到了泼溅艺术 它基于此 YouTube
  • 如何有效地计算另一列中每个元素的较大元素的数量?

    我有以下内容df name created utc 0 t1 cqug90j 1430438400 1 t1 cqug90k 1430438400 2 t1 cqug90z 1430438400 3 t1 cqug91c 143043840
  • 使用 Python 进行 Google 搜索网页抓取 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近为了工作中的一些项目 学习了很多python 目前我需要使用谷歌搜索结果进行一些网络抓取 我发现几

随机推荐

  • c语言编程题

    include stdafx h include
  • 概念解析

    注1 本文系 概念解析 系列之一 致力于简洁清晰地解释 辨析复杂而专业的概念 本次辨析的概念是 非极大值抑制 NMS 及其改进工作 非极大值抑制 NMS 原理 缺点和改进 1 背景介绍 在计算机视觉中 物体检测是一个核心且充满挑战的问题 众
  • MQTT 协议基本介绍

    目录 一 简介 二 基本特点 三 基本概念 四 简单示例 五 进一步了解MQTT 3 六 MQTT协议的工作方式 七 MQTT控制报文 CONNECT报文 CONNACK报文 八 清除会话 保留消息和QoS的组合 九 MQTT 5 0 协议
  • Hyperledger Fabric环境搭建流程记录详解

    Fabric环境搭建记录 什么是超级账本Fabric 1 Fabric的本质 与一般区块链技术的相同点 Fabric与其他区块链技术一样 都有一个账本 和以太坊相像 也允许使用智能合约 从本质上看 它是参与者共同管理交易的系统 是联盟链的典
  • python分析excel数据-对照Excel使用Python进行数据分析,更快掌握

    Excel和Python 作为数据分析的主流工具 在从效率提升到数据商业化的整个过程中 都起到了重要作用 不管是在Excel中通过鼠标点选实现 亦或是利用Python通过代码实现 数据分析中的很多基础功能都是相通的 在数据量级大跃进的今天
  • HTTP协议原理

    一 http协议是什么 HTTP协议 全称HyperText Transfer Protocol 中文名为超文本传输协议 是互联网中最常用的一种网络协议 广泛应用于Web浏览器和Web服务器之间的应用层通信协议 在Internet上的Web
  • 基于flask与tk的网络粘贴板

    基于flask与tk的网络粘贴板 由于本人一直用 linux 所以平时和我的队友们交流代码 十分的不方便 没有办法 我就自己写一个功能简单但是特别适合我自己用的一个网络粘贴板 只有两个按钮 下载 和 上传 我的这个应用分成两个部分 一个是服
  • MFC之树形控件25

    1 树形控件 先了解相关知识 1 创建基于对话框的项目 2 删除对话框原有的内容 添加树形控件TreeControl 3 右击树形控件属性 然后添加相应属性 4 在资源视图里面右击icon文件夹 添加资源 选择icon导入预先准备好的图片
  • idea plugins一直在转圈解决方法

    方案一 配置代理 https plugins jetbrains com 然后重启idea 方案二 打开ip查看网站查看plugins jetbrains com的ip ip查看 然后将ip配置到host文件中 打开host文件 C Win
  • 胖AP与瘦AP的区别以及胖瘦AP组网的优劣对比

    一 胖瘦AP如何区分 无线AP通常可以分为胖AP Fat AP 和瘦AP Fit AP 两类 不是以外观来分辨的 而是从其工作原理和功能上来区分 当然 部分胖 瘦AP在外观上确实能分辨 比如有WAN口的一定是胖AP 胖AP除了前面提到的无线
  • 算法编程题-字符串类型题目

    1 介绍 在笔试面试中 字符串类型题目相当广泛 原因有一下几点 1 字符串可以看做是字符类型的数组 与数组的排序 查找 调整有关 2 很多其他类型的题目最终可能会转化成字符串类型的题目 2 需要掌握的几个概念 1 回文 2 子串 连续 3
  • NLP实践——VQA/Caption生成模型BLIP-2的应用介绍

    NLP实践 VQA Caption生成模型BLIP 2的应用介绍 1 简介 2 模型下载 3 运行环境 4 模型应用 1 简介 今天介绍一个跨模态模型 也是最近比较火的一个工作 叫做BLIP 2 很久很久之前我写过一个简单的image ca
  • ubuntu14.04安装CUDA7.0、CUDNN7.0详细步骤

    一 安装CUDA7 0 CUDA 7 0在Linux下的安装步骤参见官网手册 CUDA Getting Started Linux 其中提及了 run deb 等安装 1 检查你的电脑是否支持CUDA 检查GPU是否支持 输入如下命令 如果
  • uniapp运行到小程序报错之[ app.json 文件内容错误] app.json: app.json 未找到

    解决方法 在project config json文件下面新增如下代码 unpackage dist dev mp weixin是你自己的代码 打包下dist文件夹下的项目名称 和pages同级的文件夹 miniprogramRoot un
  • Angular学习笔记48:响应式表单-FormArray 和 FormGroup的多层嵌套

    继Angular学习笔记46 响应式表单 使用FormBuild快速构建表单 可以使用FormBuilder快速便捷的构建出需要的表单 有时候 在FormArray中 不仅仅是一个控件 有可能是多个 这个时候 这个FormArray中的元素
  • Dynamics CRM on premise 和 Skype for Business 集成显示用户状态

    Applies To Dynamics 365 online Dynamics 365 on premises Dynamics CRM 2016 Dynamics CRM Online Using Skype for Business w
  • EMC一些常见问题(面试也会稍微提及)

    什么是EMC测试 如何进行EMC测试 什么是EMC测试 如何进行EMC测试 EMC EMI设计 电子发烧友网 elecfans com 1 为什么要对产品做电磁兼容设计 答 满足产品功能要求 减少调试时间 使产品满足电磁兼容标准的要求 使产
  • STMF103学习笔记(三)——按键输入

    实验三 按键输入 注意输入模式的设置 按下时为高电平设置为下拉模式 按下时为低电平设置为上拉模式 这样输入时 上拉模式的得到高点平 下拉模式得到低电平 具体原理还不是很懂 按键IO输入初始化参考代码 void KEY Init 这里初始化k
  • 图像分割与目标检测与区别

    检测与分割的区别 https www leiphone com category yanxishe Fah5xOL3Qb96k1NL html 1 目标检测 预测包围盒 YOLO Fast RCNN 似乎还有个SSD 输入 一个矩阵 输入图
  • 6-python异常、错误、模块、包

    文章目录 1 异常 2 错误 3 模块 4 包 综合练习 1 异常 打开一个不存在的文件会引发异常 FileNotFoundError Errno 2 No such file or directory D 不存在的文件 txt f ope