当前位置: 首页 > news >正文

关于 python 的异常使用说明 (python 的文件和异常)

文章目录

        • 异常
          • 1. 处理异常 ZeroDivisionError 异常
          • 2. 使用 try-except 代码块
          • 3. 使用异常避免崩溃
          • 4. else 代码块
          • 5. 处理 FileNotFoundError 异常
          • 6. 分析文本
          • 7. 失败时一声不吭

异常

pyhong 使用被异常成为异常的特殊对象来管理程序执行期间发生的错误。
每当发生让 python 不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个 tracback,其中包含有关异常的报告。
异常是使用 try-except 代码块处理的。它让python执行指定的操作,同时告诉python发生异常时该怎么办。使用它,即便出现异常,程序也将继续运行:显示你编写的友好错误信息,而不是令用户迷惑的 tracback

1. 处理异常 ZeroDivisionError 异常

我们先来看一下导致python异常的简单错误:
你可能知道不能将一个数字除以0,但我们让python这样做呢?

print(5/0)

在这里插入图片描述
python 解释器在运行中已经告诉我们错误问题了,
它说 除数为零的一种错误,而 ZeroDivisionError 这个异常对象,就是python无法按照你的要求正常执行时创建的。

为解决这个问题,我们可以使用:

2. 使用 try-except 代码块

当你认为可能会发生错误时,就可以编写这个代码块来处理可能引发的异常。

try:print(5/0)
except ZeroDivisionError:print('零不可以作为除数哦!')

在这段代码当中,
我们将导致错误的 代码放在了 try代码块中。如果try处的代码块运行时不会出现异常,python也将不会执行 except 代码块。反之,python 将查找 except 代码块,并执行其中的代码。

我们来看一下执行结果:
在这里插入图片描述

3. 使用异常避免崩溃

在发生错误时,如果程序还有工作没有执行完成,妥善地处理错误尤为重要。这种情况常会发生在要求用户提供输入的程序当中;如果能够妥善处理无效输入,就能再提示用户提供有效输入,而不至于崩溃。

我们来编写一个简单的计算器:

print('- - - 欢迎使用- 计算器 - - - ')
print('使用请按:'+'e'+',退出请按:'+'q')while True:uInfo = input('请您开始录入:')if uInfo == 'q':breakif uInfo =='e':number1 = input('请您录入被除数:')number2 = input('请您继续录入除数:')print('计算器正在为您计算结果....')print(int(number1)/int(number2))

我们只是编写一个简易的计算器,用于说明使用程序出现问题导致的问题。
如果正常编写是可以做四则运算的,而这里唯有的除法计算会造成什么样的问题呢?
结合上面的知识,我们知道这里需要编写一个 try-except 来处理,如果不进行处理,会造成两个问题,其一是让用户的使用感下降,尽量不要让用户体验到这种他看不懂的问题。其二是让攻击者有机可能,这种问题会导致你的程序被训练有素的攻击者攻击,他很有可能会通过的你 traceback 获取到你文件名称。

下面,我们通过 else 代码块的结合使用来处理这种现象:

4. else 代码块

这里我们继续将可能引发错误的代码放在 try-except代码块,来提高这个程序抵御错误的能力。但是这里还包含一个 elese 代码块,依赖于 try 代码块成功执行的代码都放到else 代码块中:

print('- - - 欢迎使用- 计算器 - - - ')
print('使用请按:'+'e'+',退出请按:'+'q')while True:uInfo = input('请您开始录入:')if uInfo == 'q':breakif uInfo =='e':number1 = input('请您录入被除数:')number2 = input('请您继续录入除数:')print('计算器正在为您计算结果....')try:answer = int(number1)/int(number2)except ZeroDivisionError:print('您不可以输入0作为除数!')else:print(answer)

在这段示例代码当中,我们将可能会出现错误的代码行放在 try中。程序在执行过程中遇到错误的话就会提示给用户我们提前设置好的内容,而不是显示给用户看不懂的非友好内容。
我们知道,如果程序按顺序执行成功,就会经过 try 代码块继续执行,这时的计算结 果就会在 else 语句中的代码行输出出来。也就是说 else 代码块写的的代码语句 都是经try 代码块运行成功后才需要运行的代码。

5. 处理 FileNotFoundError 异常

如果我们读取一个并不存在的文件,python 解释器会抛处什么样的异常呢?

filename = 'aa.txt'
with open(filename) as file_object:contets = file_object.read()

当然,我们并没有提前创建这个文件,
我们看一下这段代码的执行结果:
在这里插入图片描述
python 解释器开始报错了,
它显示 FileNotFoundError 异常,看来是因为 python 找不到要打开的文件,所以创建了这个异常。

其实这个错误是因为 open() 导致的。
处理这个问题也不难,记得我们今天学习的主旨是什么吗?
对,通过 tey-except 代码块来解决:

filename = 'aa.txt'try:with open(filename) as file_object:contets = file_object.read()
except FileNotFoundError:print('很抱歉,您要读取的:'+filename+'文件不存在哦!')

加上 try 代码块后,在运行这段代码示例,如果还是出现问题,
他会提示给用户这样的信息:
在这里插入图片描述

其实要处理的文件并不存在。因此这样进行处理的意义也并不大。下面我们将这个示例进行扩展,看看你在使用多个文件时,异常处理可提供什么样的帮助。

6. 分析文本

这里先给大家介绍一个函数,split()。它根据一个字符串创建一个单词列表。
什么意思呢?

方法 split()
以空格分隔符将字符串拆分成多个部分,并将这些部分都存储到一个列表中。结果是一个包含字符串中所有单词的列表。

现在,我们准备好一个文本文件,
在文本文件内部粘进寒窑赋的整篇内容。然后编写代码读取这个文件,
在成功读取之后,调用 split 函数分隔其中的元素,
最后输出分隔出来的内容,看看我们一共分隔了多少个元素:

filename = 'hyf.txt'try:with open(filename) as file_object:contets = file_object.read()except FileNotFoundError :print('很抱歉,您要读取的:'+filename+'文件不存在哦!')
else:words = contets.split()num_words = len(words)print('本篇文章一共包含段落:'+ str(num_words) +'个。')

在这段代码中,其实我们不处理可能出现的异常,程序也不会出现错误,
因为代码读取的该文本文件是存在的。

还有一点需要说明:
split() 函数是根据空格来拆分字符串存储为列表的。
所以执行这段代码,只有 7个段落行。

在这里插入图片描述

7. 失败时一声不吭

在这个标题里,想给大家介绍一个 pass 语句。
之前用到的 try 语句,都是 except 块中,设置了出现异常时显示给用户的友好信息,
但如果不想给用户显示内容呢?
我们可以利用 pass 语句:

try:#省略代码语句
except ZerroDivisionError:pass

这样编写的 except 代码块显示给用户既不会出现 traceback,也不会提示异常友好信息内容。而且 pass 语句还充当了占位符,它提醒你在程序的某个地方什么都没有做,并且以后也许要在这里做些什么。

相关文章:

关于 python 的异常使用说明 (python 的文件和异常)

文章目录异常1. 处理异常 ZeroDivisionError 异常2. 使用 try-except 代码块3. 使用异常避免崩溃4. else 代码块5. 处理 FileNotFoundError 异常6. 分析文本7. 失败时一声不吭异常 pyhong 使用被异常成为异常的特殊对象来管理程序执行期间发生的错误。 每当发生让 python 不知所…...

Spark RDD持久化

RDD Cache缓存 RDD通过Cache或者Persist方法将前面的计算结果缓存,默认情况下会把数据以序列化的形式缓存在JVM的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供…...

【Linux】Linux系统安装Python3和pip3

1.说明 一般来说Linux会自带Python环境,可能是Python3或者Python2,可能有pip也可能没有pip,所以有时候需要自己安装指定的Python版本。Linux系统下的安装方式都大同小异,基本上都是下载安装包然后编译一下,再创建好软…...

用java进行base64加密

首先定义一组密钥,加密和解密使用同一组密钥private final String key "hahahahahaha";也可以随机生成密钥/*** 生成随机密钥* param keySize 密钥大小推荐128 256* return* throws NoSuchAlgorithmException*/public static String generateSecret(int keySize) th…...

torch函数合集

torch.tensor() 原型:torch.tensor(data, dtypeNone, deviceNone, requires_gradFalse) 功能:其中data可以是:list,tuple,NumPy,ndarray等其他类型,torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应类型的torch.Tenso…...

AcWing算法提高课-3.1.2信使

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 题目传送门点这里 题目描述 战争时期&#xff0c;前线有 nnn 个哨所&#xff0c;每个哨所可能会与其他若干个哨所之间有通信联系。 信使负责在哨所之间传递信息&#xff0c;当然&#xff0c;…...

Paddle OCR Win 11下的安装和简单使用教程

Paddle OCR Win 11下的安装和简单使用教程 对于中文的识别&#xff0c;可以考虑直接使用Paddle OCR&#xff0c;识别准确率和部署都相对比较方便。 环境搭建 目前PaddlePaddle 发布到v2.4&#xff0c;先下载paddlepaddle&#xff0c;再下载paddleocr。根据自己设备操作系统进…...

杂谈:数组index问题和对象key问题

面试题一&#xff1a; var arr [1, 2, 3, 4] 问&#xff1a;arr[1] ?; arr[1] ?答&#xff1a;arr[1] 2; arr[1] 2 这里可以再分为两个问题&#xff1a; 1、数组赋值 var arr [1, 2, 3, 4]arr[1] 10; // 数字场景 arr[10] 1; // 字符串场景 arr[a] 1; // 字符串…...

三天Golang快速入门—Slice切片

三天Golang快速入门—Slice切片Slice切片切片原理切片遍历append函数操作切片append添加append追加多个切片中删除元素切片合并string和slice的联系Slice切片 切片原理 由三个部分构成&#xff0c;指针、长度、容量指针&#xff1a;指向slice第一个元素对应的数组元素的地址长…...

腾讯会议演示者视图/演讲者视图

前言 使用腾讯会议共享PPT时&#xff0c;腾讯会议支持共享用户使用演示者视图/演讲者视图&#xff0c;而会议其他成员可以看到正常的放映视图。下面以Win10系统和Office为例&#xff0c;介绍使用步骤。值得一提的是&#xff0c;该方法同时适用于单显示屏和多显示屏。 腾讯会议…...

【C++】类与对象(一)

文章目录1、面向过程和面向对象初步认识2、类的引入3、类的定义4、类的访问限定符5、类的作用域6、类的实例化7、计算类对象的大小8、this指针9、 C语言和C实现Stack的对比1、面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题…...

JavaScript基本语法

本文提到的绝大多数语法都是与Java不同的语法,相同的就不会赘述了.JavaScript的三种引入方式内部js<body><script>alert(hello);</script> </body>行内js<body><div onclick"alert(hello)">这是一个div 点击一下试试</div>…...

OpenCV4.x图像处理实例-道路车辆检测(基于背景消减法)

通过背景消减进行道路车辆检测 文章目录 通过背景消减进行道路车辆检测1、车辆检测思路介绍2、BackgroundSubtractorMOG23、车辆检测实现在本文中,将介绍如何使用简单但有效的背景-前景减法方法执行车辆检测等任务。本文将使用 OpenCV 中使用背景-前景减法和轮廓检测,以及如何…...

pwnlab通关流程

pwnlab通关 关于文件包含&#xff0c;环境变量劫持的一个靶场 信息收集 靶机ip&#xff1a;192.168.112.133 开放端口 根据开放的端口信息决定从80web端口入手 目录信息 在images和upload路径存在目录遍历&#xff0c;config.php被渲染无法查看&#xff0c;upload.php需…...

面向过程与面向对象的区别与联系

目录 什么是面向过程 什么是面向对象 区别 各自的优缺点 什么是面向过程 面向过程是一种以事件为中心的编程思想&#xff0c;编程的时候把解决问题的步骤分析出来&#xff0c;然后用函数把这些步骤实现&#xff0c;在一步一步的具体步骤中再按顺序调用函数。 什么是面向对…...

主机状态(查看资源占用情况、查看网络占用情况)

1. 查看资源占用情况 【1】可以通过top命令查看cpu、内存的使用情况&#xff0c;类似windows的任务管理器 默认5s刷新一次 语法&#xff1a;top 可 Ctrl c 退出 2.磁盘信息监控 【1】使用df命令&#xff0c;查看磁盘信息占用情况 语法&#xff1a;df [ -h ] 以更加人性化…...

代码随想录算法训练营第四十一天 | 01背包问题-二维数组滚动数组,416. 分割等和子集

一、参考资料01背包问题 二维 https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1cg411g7Y6 01背包问题 一维 https://programmercarl.com/%E8%83%8C%E5…...

VMware NSX 4.1 发布 - 网络安全虚拟化平台

请访问原文链接&#xff1a;VMware NSX 4 - 网络安全虚拟化平台&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org VMware NSX 提供了一个敏捷式软件定义基础架构&#xff0c;用来构建云原生应用程序环境。NSX 专注于为具有异…...

计算理论 复杂度预备知识

文章目录计算理论 复杂度预备知识符号递归表达式求解通项公式主方法Akra-Bazzi 定理计算理论 复杂度预备知识 符号 f(n)o(g(n))f(n)o(g(n))f(n)o(g(n)) &#xff1a;∃c\exists c∃c &#xff0c;当 nnn 足够大时&#xff0c; f(n)<cg(n)f(n)\lt cg(n)f(n)<cg(n) &#…...

二叉树——二叉搜索树中的插入操作

二叉搜索树中的插入操作 链接 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...