关于“Python”的核心知识点整理大全25

目录

10.3.4 else 代码块、

10.3.5 处理 FileNotFoundError 异常

alice.py

在这个示例中,try代码块引发FileNotFoundError异常,因此Python找出与该错误匹配的 except代码块,并运行其中的代码。最终的结果是显示一条友好的错误消息,而不是traceback:

10.3.6 分析文本

10.3.7 使用多个文件

word_count.py

10.3.8 失败时一声不吭

关于“Python”的核心知识点整理大全24-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


10.3.4 else 代码块、

通过将可能引发错误的代码放在try-except代码块中,可提高这个程序抵御错误的能力。错 误是执行除法运算的代码行导致的,因此我们需要将它放到try-except代码块中。这个示例还包 含一个else代码块;依赖于try代码块成功执行的代码都应放到else代码块中:

print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
 first_number = input("\nFirst number: ")
 if first_number == 'q':
 break
 second_number = input("Second number: ")
1 try:
 answer = int(first_number) / int(second_number)
2 except ZeroDivisionError:
 print("You can't divide by 0!")
3 else:
 print(answer)

我们让Python尝试执行try代码块中的除法运算(见1),这个代码块只包含可能导致错误的 代码。依赖于try代码块成功执行的代码都放在else代码块中;在这个示例中,如果除法运算成 功,我们就使用else代码块来打印结果(见2)。 except代码块告诉Python,出现ZeroDivisionError异常时该怎么办(见3)。如果try代码块因除零错误而失败,我们就打印一条友好的消息,告诉用户如何避免这种错误。程序将继续运行, 用户根本看不到traceback:

Give me two numbers, and I'll divide them.
Enter 'q' to quit.
First number: 5
Second number: 0
You can't divide by 0!
First number: 5
Second number: 2
2.5
First number: q

try-except-else代码块的工作原理大致如下:Python尝试执行try代码块中的代码;只有可 能引发异常的代码才需要放在try语句中。有时候,有一些仅在try代码块成功执行时才需要运行 的代码;这些代码应放在else代码块中。except代码块告诉Python,如果它尝试运行try代码块中 的代码时引发了指定的异常,该怎么办。 通过预测可能发生错误的代码,可编写健壮的程序,它们即便面临无效数据或缺少资源,也 能继续运行,从而能够抵御无意的用户错误和恶意的攻击。

10.3.5 处理 FileNotFoundError 异常

使用文件时,一种常见的问题是找不到文件:你要查找的文件可能在其他地方、文件名可能 不正确或者这个文件根本就不存在。对于所有这些情形,都可使用try-except代码块以直观的方 式进行处理。

我们来尝试读取一个不存在的文件。下面的程序尝试读取文件alice.txt的内容,但我没有将 这个文件存储在alice.py所在的目录中:

alice.py
filename = 'alice.txt'
with open(filename) as f_obj:
 contents = f_obj.read() 

Python无法读取不存在的文件,因此它引发一个异常:

Traceback (most recent call last):
 File "alice.py", line 3, in <module>
 with open(filename) as f_obj:
FileNotFoundError: [Errno 2] No such file or directory: 'alice.txt' 

在上述traceback中,最后一行报告了FileNotFoundError异常,这是Python找不到要打开的文件时创建的异常。在这个示例中,这个错误是函数open()导致的,因此要处理这个错误,必须将 try语句放在包含open()的代码行之前:

filename = 'alice.txt'
try:
 with open(filename) as f_obj:
 contents = f_obj.read()
except FileNotFoundError:
 msg = "Sorry, the file " + filename + " does not exist."
 print(msg) 
在这个示例中,try代码块引发FileNotFoundError异常,因此Python找出与该错误匹配的 except代码块,并运行其中的代码。最终的结果是显示一条友好的错误消息,而不是traceback:
Sorry, the file alice.txt does not exist. 

如果文件不存在,这个程序什么都不做,因此错误处理代码的意义不大。下面来扩展这个示 例,看看在你使用多个文件时,异常处理可提供什么样的帮助。

10.3.6 分析文本

你可以分析包含整本书的文本文件。很多经典文学作品都是以简单文本文件的方式提供的, 因为它们不受版权限制。本节使用的文本来自项目Gutenberg(http://gutenberg.org/),这个项目提 供了一系列不受版权限制的文学作品,如果你要在编程项目中使用文学文本,这是一个很不错的 资源。

下面来提取童话Alice in Wonderland的文本,并尝试计算它包含多少个单词。我们将使用方 法split(),它根据一个字符串创建一个单词列表。下面是对只包含童话名"Alice in Wonderland" 的字符串调用方法split()的结果:

>>> title = "Alice in Wonderland"
>>> title.split()
['Alice', 'in', 'Wonderland']

方法split()以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。 结果是一个包含字符串中所有单词的列表,虽然有些单词可能包含标点。为计算Alice in Wonderland包含多少个单词,我们将对整篇小说调用split(),再计算得到的列表包含多少个元 素,从而确定整篇童话大致包含多少个单词:

filename = 'alice.txt'
try:
 with open(filename) as f_obj:
 contents = f_obj.read()
except FileNotFoundError: 
msg = "Sorry, the file " + filename + " does not exist."
 print(msg)
else:
 # 计算文件大致包含多少个单词
1 words = contents.split()
2 num_words = len(words)
3 print("The file " + filename + " has about " + str(num_words) + " words.")

我们把文件alice.txt移到了正确的目录中,让try代码块能够成功地执行。在Ø处,我们对变 量contents(它现在是一个长长的字符串,包含童话Alice in Wonderland的全部文本)调用方法 split(),以生成一个列表,其中包含这部童话中的所有单词。当我们使用len()来确定这个列表 的长度时,就知道了原始字符串大致包含多少个单词(见)。在处,我们打印一条消息,指 出文件包含多少个单词。这些代码都放在else代码块中,因为仅当try代码块成功执行时才执行 它们。输出指出了文件alice.txt包含多少个单词:

The file alice.txt has about 29461 words. 

这个数字有点大,因为这里使用的文本文件包含出版商提供的额外信息,但与童话Alice in Wonderland的长度相当一致。

10.3.7 使用多个文件

下面多分析几本书。这样做之前,我们先将这个程序的大部分代码移到一个名为 count_words()的函数中,这样对多本书进行分析时将更容易:

word_count.py
def count_words(filename):
1 """计算一个文件大致包含多少个单词"""
try:
 with open(filename) as f_obj:
 contents = f_obj.read()
 except FileNotFoundError:
 msg = "Sorry, the file " + filename + " does not exist."
 print(msg)
 else:
 # 计算文件大致包含多少个单词
 words = contents.split()
 num_words = len(words)
 print("The file " + filename + " has about " + str(num_words) +
 " words.")
filename = 'alice.txt'
count_words(filename) 

这些代码大都与原来一样,我们只是将它们移到了函数count_words()中,并增加了缩进量。 修改程序的同时更新注释是个不错的习惯,因此我们将注释改成了文档字符串,并稍微调整了一下措辞(见1)。

现在可以编写一个简单的循环,计算要分析的任何文本包含多少个单词了。为此,我们将要 分析的文件的名称存储在一个列表中,然后对列表中的每个文件都调用count_words()。我们将 尝试计算Alice in Wonderland、Siddhartha、Moby Dick和Little Women分别包含多少个单词,它们 都不受版权限制。我故意没有将siddhartha.txt放到word_count.py所在的目录中,让你能够看到这 个程序在文件不存在时处理得有多出色:

def count_words(filename):
 --snip--
filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
 count_words(filename) 

文件siddhartha.txt不存在,但这丝毫不影响这个程序处理其他文件:

The file alice.txt has about 29461 words.
Sorry, the file siddhartha.txt does not exist.
The file moby_dick.txt has about 215136 words.
The file little_women.txt has about 189079 words. 

在这个示例中,使用try-except代码块提供了两个重要的优点:避免让用户看到traceback; 让程序能够继续分析能够找到的其他文件。如果不捕获因找不到siddhartha.txt而引发的 FileNotFoundError异常,用户将看到完整的traceback,而程序将在尝试分析Siddhartha后停止运 行——根本不分析Moby Dick和Little Women。

10.3.8 失败时一声不吭

在前一个示例中,我们告诉用户有一个文件找不到。但并非每次捕获到异常时都需要告诉用 户,有时候你希望程序在发生异常时一声不吭,就像什么都没有发生一样继续运行。要让程序在 失败时一声不吭,可像通常那样编写try代码块,但在except代码块中明确地告诉Python什么都不 要做。Python有一个pass语句,可在代码块中使用它来让Python什么都不要做:

def count_words(filename):
 """计算一个文件大致包含多少个单词"""
 try:
 --snip--
 except FileNotFoundError:
1 pass
 else:
 --snip--
filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
 count_words(filename)

相比于前一个程序,这个程序唯一不同的地方是 Ø 处 的 pass 语句。现在,出现 FileNotFoundError异常时,将执行except代码块中的代码,但什么都不会发生。这种错误发生时, 不会出现traceback,也没有任何输出。用户将看到存在的每个文件包含多少个单词,但没有任何 迹象表明有一个文件未找到:

The file alice.txt has about 29461 words.
The file moby_dick.txt has about 215136 words.
The file little_women.txt has about 189079 words.

pass语句还充当了占位符,它提醒你在程序的某个地方什么都没有做,并且以后也许要在这 里做些什么。例如,在这个程序中,我们可能决定将找不到的文件的名称写入到文件 missing_files.txt中。用户看不到这个文件,但我们可以读取这个文件,进而处理所有文件找不到 的问题。

关于“Python”的核心知识点整理大全24-CSDN博客

关于“Python”的核心知识点整理大全23-CSDN博客

关于“Python”的核心知识点整理大全22-CSDN博客

关于“Python”的核心知识点整理大全21-CSDN博客

关于“Python”的核心知识点整理大全20-CSDN博客

关于“Python”的核心知识点整理大全19-CSDN博客

关于“Python”的核心知识点整理大全18-CSDN博客

关于“Python”的核心知识点整理大全17-CSDN博客

Python:核心知识点整理大全16-笔记-CSDN博客

关于“Python”的核心知识点整理大全15-CSDN博客

关于“Python”的核心知识点整理大全14-CSDN博客

关于“Python”的核心知识点整理大全13-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖音直播间websocket礼物和弹幕消息推送可能出现重复的情况,解决办法

在抖音直播间里&#xff0c;通过websocket收到的礼物消息数据格式如下&#xff1a; {common: {method: WebcastGiftMessage,msgId: 7283420150152942632,roomId: 7283413007005207308,createTime: 1695803662805,isShowMsg: True,describe: 莎***:送给主播 1个入团卡,priority…

速学数据结构 | 二叉树堆的实现详解篇

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 &#x1f308;hello&#xff01; 各位宝子们大家好啊&#xff0c;二叉树的概念大家都了解了那么我们…

自动驾驶学习笔记(十九)——Planning模块

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 Planning作用 Planning内容 Plannin…

uni-app ucharts中饼图与圆环图区别

项目情况&#xff1a; uni-app的用于移动端H5项目&#xff0c;包使用uni_modules目录存放。 图表引用ucharts中的echarts配置的组件方式 区别1 饼图与圆环图在echarts使用的配置都是pie类型。但是配置raduis使用&#xff1a; radius: [40%, 70%] 区别2 组件type指明&#xf…

保护您的Android应用程序:Android应用程序安全一览

保护您的Android应用程序&#xff1a;Android应用程序安全一览 我们都知道Android是为所有人设计的——开放、面向开发者、面向用户&#xff0c;这种开放性为今天和明天的移动技术提供了很多便利。然而&#xff0c;开放性也带来了需要妥善处理的安全风险。 安全是我们所有人都…

广州华锐互动VRAR:利用VR开展新能源汽车触电安全演练,降低培训成本和风险

随着新能源汽车行业的快速发展&#xff0c;相关的安全培训也变得越来越重要。其中&#xff0c;触电急救培训对于保障驾驶员和乘客的安全具有重要意义。传统培训方式存在一些不足&#xff0c;而利用VR技术进行培训则具有很多优势。 利用VR技术开展新能源汽车触电安全演练可以在模…

ansible模块 (7-13)

模块 7、hostname模块&#xff1a; 远程主机名管理模块 ansible 192.168.10.202 -m hostname -a nameliu 8、copy模块&#xff1a; 用于复制指定的主机文件到远程主机的模块 常用参数&#xff1a; dest: 指出要复制的文件在哪&#xff0c;必须使用绝对路径。如果源目标是…

fastjson1.2.24 反序列化漏洞(CVE-2017-18349)分析

FastJson在< 1.2.24 版本中存在反序列化漏洞&#xff0c;主要原因FastJson支持的两个特性&#xff1a; fastjson反序列化时&#xff0c;JSON字符串中的type字段&#xff0c;用来表明指定反序列化的目标恶意对象类。fastjson反序列化时&#xff0c;字符串时会自动调用恶意对…

运维知识点-Kubernetes_K8s

Kubernetes RBAC配置不当攻击场景攻击过程 RBAC配置不当 Service Account本质是服务账号&#xff0c;是Pod连接K8s集群的凭证。 在默认情况下&#xff0c;系统会为创建的Pod提供一个默认的Service Account&#xff0c; 用户也可以自定义Service Account&#xff0c;与Service…

【软件安全实验】使用Find Security Bugs工具静态分析WebGoat

文章目录 实验要求实验步骤一、在IntelliJ上安装插件配置规则库二、下载WebGoat源代码三、Find Security Bugs工具静态分析WebGoat 实验要求 用Find Security Bugs(http://find-sec-bugs.github.io)工具静态分析WebGoat。WebGoat是OWASP组织研制出的用于进行Web漏洞实验的应用…

C语言—每日选择题—Day52

第一题 1. 执行c程序代码&#xff0c;a,b,c,d的值分别为&#xff08;&#xff09; int a 1; int b 0; int c 0; int d (a) * (c 1); A&#xff1a;2&#xff0c;0&#xff0c;1&#xff0c;2 B&#xff1a;1&#xff0c;0&#xff0c;1&#xff0c;1 C&#xff1a;2&…

C++第一讲之初入C++

注&#xff1a;本文是对于学完C语言再学C同学的讲解&#xff0c;主要补充C与C语言不同之处&#xff0c;如果你没学过C语言&#xff0c;不建议观看本文。 一.C简介 我们都知道C语言是过程性语言&#xff08;强调的是实现过程&#xff09;&#xff0c;即对计算机语言要处理的两…

Educational Codeforces Round 160 (Rated for Div. 2) A~C

目录 A. Rating Increase 题目分析&#xff1a; B. Swap and Delete 题目分析: C. Game with Multiset 题目分析: A. Rating Increase 题目分析&#xff1a; 因为首部不为零&#xff0c;故我们从第二个字符开始遍历&#xff0c;如果遇到第一个不为‘0’的字符&#xff0…

RPC(5):AJAX跨域请求处理

接上一篇RPC&#xff08;4&#xff09;&#xff1a;HttpClient实现RPC之POST请求进行修改。 1 修改客户端项目 1.1 修改maven文件 修改后配置文件如下&#xff1a; <dependencyManagement><dependencies><dependency><groupId>org.springframework.b…

Kafka 分级存储在腾讯云的实践与演进

导语 腾讯云消息队列 Kafka 内核负责人鲁仕林为大家带来了《Kafka 分级存储在腾讯云的实践与演进》的精彩分享&#xff0c;从 Kafka 架构遇到的问题与挑战、Kafka 弹性架构方案类比、Kafka 分级存储架构及原理以及腾讯云的落地与实践四个方面详细分享了 Kafka 分级存储在腾讯云…

Flash Attention(1):背景介绍,与传统Attention对比,前向反向算法解析

0 英文缩写 FA&#xff1a; Flash AttentionHBM&#xff1a;High Bandwidth Memory&#xff0c;高带宽显存 0 论文 [2205.14135] FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中文&#xff1a;FlashAttention&#xff1a;一种具有 IO 感知…

【jvm从入门到实战】(九) 垃圾回收(2)-垃圾回收器

垃圾回收器是垃圾回收算法的具体实现。 由于垃圾回收器分为年轻代和老年代&#xff0c;除了G1之外其他垃圾回收器必须成对组合进行使用 垃圾回收器的组合使用关系图如下。 常用的组合如下: Serial&#xff08;新生代&#xff09; Serial Old&#xff08;老年代&#xff09; Pa…

【每日一题】【12.19】1901.寻找峰值Ⅱ

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.题目链接 1901. 寻找峰值 IIhttps://leetcode.cn/problems/find-a-peak-element-ii/ 2.题目描述 看到这个时间复杂度就知道和昨…

关于折线回归

一、说明 今天的帖子主要是关于使用折线回归找到最佳值。即将某条曲线分解成包络线段&#xff0c;然后用分段回归方式优化。但它也涉及使用 SAS 和 R 的剂量反应研究和样条曲线。这不是第一篇关于这些主题的文章&#xff0c;但我确实想在其中添加折线。只是因为它还在使用。 二…

借助dayjs,把各种类型的日期转换成“YYYY-MM-DD“格式

记得先 npm install datajs <template><div class"home"></div> </template> <script lang"ts" setup> import { reactive, ref } from "vue";import dayjs from "dayjs"; import customParseFormat f…