2022年4月24日:面向初学者的Python--Python错误处理(很难理解)

python写代码过程中的坑230915 要判断节点 i 是否是列表 a 中的最后一个值,可以使用以下方法:i = 5else:在上述代码中,我们将列表 a 初始化为 [1, 2, 3, 4, 5],并将节点 i 设置为 5。然后我们使用条件语句 if 来检查 i 是否等于列表 a 的最后一个值,通过使用 a[-1] 可以获取列表 a 的最后一个元素。 阅读详情

使用回溯查找错误

Python中的异常是语言的核心功能。

回溯

回溯几乎始终包含以下信息:

  • 涉及对每个函数的每次调用的所有文件路径
  • 与每个文件路径关联的行号
  • 产生异常时涉及的函数、方法或类的名称
  • 引发的异常的名称

Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> open("/path/to/mars.jpg")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/path/to/mars.jpg'
>>>

处理异常

try和except块

如果文件或目录不存在,则会引发FileNotFoundError。如果想要处理此异常,可以使用try和except块。

Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> try:
...     open('config.txt')
... except FileNotFoundError:
...     print("Couldn't find the config.txt file!")
...
Couldn't find the config.txt file!
>>>

在 try 关键字之后,添加可能引发异常的代码。 接下来,添加 except 关键字与可能的异常,后跟在该条件发生时需要运行的任何代码。 由于 config.txt 在系统中不存在,因此 Python 将打印配置文件不存在。 try 和 except 块以及有用的消息会阻止回溯,并仍通知用户有关此问题的信息。

删除config.txt文件,创建一个文件config.txt,还是显示不了IsADirectoryError的错误信息。 

无文件:

有文件: 

IsADirectoryError,暂时没有机会遇到。

 如果导航系统负载过大,并且文件系统变得太忙,则很有必要同时捕获 BlockingIOError 和 TimeOutError。

有文件:

无文件:

暂时没有机会遇到BlockingIOError和TimeoutError。 

如果需要访问与异常相关的错误,则必须更新 except 行以包含 as 关键字。 如果异常太过普通,则这种方法就非常方便并且错误消息会很有用:

Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> try:
...     open("mars.jpg")
... except FileNotFoundError as err:
...     print("got a problem trying to read the file:",err)
...
got a problem trying to read the file: [Errno 2] No such file or directory: 'mars.jpg'
>>>
>>> try:
...     open("mars.jpg")
... except OSError as err:
...     if err.errno==2:
...             print("Couldn't find the config.txt file!")
...     elif err.errno==13:
...             print("Found config.txt but couldn't read it")
...
Couldn't find the config.txt file!
>>>

处理错误时:

错误不指出真正的问题。

错误给出与实际问题不匹配的输出。

错误不指示可以执行哪些操作来解决问题。

引发异常

 

Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> def water_left(astronauts,water_left,days_left):
...     daily_usage=astronauts*11
...     total_usage=daily_usage*days_left
...     total_water_left=water_left-total_usage
...     return f"Total water left after {days_left} day is: {total_water_left} liters"
...
>>> water_left(5,100,2)
'Total water left after 2 day is: -10 liters'
>>> def water_left(astronauts,water_left,days_left):
...     daily_usage=astronauts*11
...     total_usage=daily_usage*days_left
...     total_water_left=water_left-total_usage
...     if total_water_left<0:
...             raise RuntimeError(f"There is not enough water for {astronauts} astronauts after {day_left} days!")
...     return f"Total water left after {day_left} days is: {total_water_left} liters"
...
>>> water_left(5,100,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in water_left
NameError: name 'day_left' is not defined. Did you mean: 'days_left'?
>>> try:
...
  File "<stdin>", line 2

    ^
IndentationError: expected an indented block after 'try' statement on line 1
>>> def water_left(astronauts,water_left,days_left):
...     daily_usage=astronauts*11
...     total_usage=daily_usage*days_left
...     total_water_left=water_left-total_usage
...     if total_water_left<0:
...             raise RuntimeError(f"There is not enough water for {astronauts} astronauts after {day_left} days!")
...     return f"Total water left after {days_left} days is: {total_water_left} liters"
...
>>> water_left(5,100,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in water_left
NameError: name 'day_left' is not defined. Did you mean: 'days_left'?
>>> def water_left(astronauts,water_left,days_left):
...     daily_usage=astronauts*11
...     total_usage=daily_usage*days_left
...     total_water_left=water_left-total_usage
...     if total_water_left<0:
...             raise RuntimeError(f"There is not enough water for {astronauts} astronauts after {days_left} days!")
...     return f"Total water left after {days_left} days is: {total_water_left} liters"
...
>>> water_left(5,100,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in water_left
RuntimeError: There is not enough water for 5 astronauts after 2 days!
>>> def water_left(astronauts,water_left,days_left):
...     for argument in[astronauts,water_left,day_left]:
...             try:
...                     argument/10
...             except TypeError:
...                     raise TypeError(f"All arguments must be of type int, but received: '{argument}'")
... daily_usage=astronauts*11
  File "<stdin>", line 7
    daily_usage=astronauts*11
    ^^^^^^^^^^^
SyntaxError: invalid syntax
>>> def water_left(astronauts,water_left,days_left):
...     for argument in[astronauts,water_left,day_left]:
...             try:
...                     argument/10
...             except TypeError:
...                     raise TypeError(f"All arguments must be of type int, but received: '{argument}'")
...     daily_usage=astronauts*11
...     total_usage=daily_usage*days_left
...     total_water_left=water_left-total_usage
...     if total_water_left<0:
...             raise RuntimeError(f"There is not enough water for {astronauts} astronauts after {after_left} days!")
...     return f"Total water left after {days_left} days is: {total_water_left} liters"
...
>>> water_left("3","200",None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in water_left
NameError: name 'day_left' is not defined. Did you mean: 'days_left'?
>>> def water_left(astronauts,water_left,days_left):
...     for argument in[astronauts,water_left,days_left]:
...             try:
...                     argument/10
...             except TypeError:
...                     raise TypeError(f"All arguments must be of type int, but received: '{argument}'")
...     daily_usage=astronauts*11
...     total_usage=daily_usage*days_left
...     total_water_left=water_left-total_usage
...     if total_water_left<0:
...             raise RuntimeError(f"There is not enough water for {astronauts} astronauts after {after_left} days!")
...     return f"Total water left after {days_left} days is: {total_water_left} liters"
...
>>> water_left("3","200",None)
Traceback (most recent call last):
  File "<stdin>", line 4, in water_left
TypeError: unsupported operand type(s) for /: 'str' and 'int'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in water_left
TypeError: All arguments must be of type int, but received: '3'
>>>

Python3 错误和异常 | 菜鸟教程(十五) try:runoob()else:try:finally:print('这句话,无论异常是否发生都会执行。')你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承,例如:>>> try:')在这个例子中,类 Exception 默认的 __init__() 被覆盖。 阅读详情

相关推荐

《Python笔记》安装(pip)第三方包报错

pip 安装numpy报错,微软 Visual Studio 重新搭建C++编译环境

镰刀 & 锤子;热情 & 初心 1万+

Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named

在学习python的过程中会遇到如下错误: >>> import mytest Traceback (most recent call last): File "", line 1, in module> ImportError: No module named py >>> 问题排查: 1.首先请在Python的模块默认目录中查看是否有“mytest.py”脚本;Windows下,

chwnpp2的专栏 24万+

Python:实现将24小时制时间转换为12小时制(含AM/PM)

在特定情况下,我们需要将24小时制时间转换为12小时制,以便更好地理解和阅读时间。Python 作为一种强大的编程语言,提供了许多实用工具来完成这样的任务。通过上述代码,我们可以很方便地将24小时制时间转换为12小时制。但需要注意的是,在实际场景中,还需要对输入的时间字符串进行合法性验证和错误处理,以确保程序的稳定性和正确性。将小时数模12,加上12倍数当需要转换为 PM 时间时。最后,使用字符串格式化函数返回格式化的时间字符串。Python:实现将24小时制时间转换为12小时制(含AM/PM)

与其临渊羡鱼,不如退而结网 1546

Python3.11教程4:异常处理

本文根据3.11官方文档,详细介绍了异常类的处理机制,异常处理的基本语句、如何自定义异常、设置或禁止异常链等内容

qq_56591814的博客 4657

Go错误处理:error、panic、recover的正确姿势

实际项目里光用errors.New不够,你需要自定义错误类型,携带更多的上下文信息。import ("errors""fmt"// ValidationError 自定义错误类型// 实现了error接口的Error()方法Field string // 出错的字段名Message string // 错误描述return fmt.Sprintf("字段[%s]校验失败 %s", e.Field, e.Message)// NotFoundError 资源不存在错误。

白话机器学习 351

Python二十行解析二进制日线文件:从字节流到OHLCV数据

二进制文件解析是数据处理的基础技术,通过固定字节偏移和struct模块将原始字节流转换为结构化数据。其原理基于文件格式约定,明确字段长度、类型和字节序,利用unpack方法高效提取信息。技术价值在于避免文本解析开销,提升读取速度与存储效率,尤其适合高频或大规模数据场景。在量化回测、行情整理等应用中,常需将.day等二进制日线文件转为DataFrame进行分析。本文以二十行Python代码为例,演示如何解析日线二进制文件,涵盖字节序处理、缩放因子调整及数据校验,帮助开发者快速实现从二进制到OHLCV的转换,并

weixin_30647423的博客 126

【周报】24点游戏Python实现与总结

本周我完成了一个基于Python的24点游戏实现。这是一个命令行交互式的数学游戏,玩家需要利用随机抽取的4个数字,通过加减乘除和括号组合成结果为24的算式。字符串处理:正则表达式、字符验证数据结构:列表、计数器算法设计:输入验证、状态管理用户体验:交互设计、错误处理通过这个项目,我巩固了Python基础语法,学习了如何设计简单的命令行游戏,并为后续更复杂的项目开发积累了经验。项目收获掌握了正则表达式在输入验证中的应用理解了游戏状态机的设计思路学会了如何平衡功能实现与代码可读性。

2401_85575143的博客 218

Python编程练习题集19-24及答案解析

Python是一门易于学习且功能强大的编程语言,它有着丰富的库支持和庞大的开发社区。它支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。在Python中,字符串是由字符组成的不可变序列。字符串的创建和基本操作是程序员进行文本处理时不可或缺的技能。字符串可以用单引号' '、双引号" "或三引号''' '''和""" """来定义。这为程序员提供了灵活性,例如,在字符串中包含引号时,可以使用不同的引号来避免转义。# 单双引号示例# 三引号示例,常用于多行字符串World!

weixin_29138345的博客 593

c# 从一组数中随机抽取一定个数_用随机的方法算24点(python)

24点很早之前就想做把它做出来,但是自己想不出来啊。看了大佬的解法用了二叉树来表示算式,但是我还是觉得好难理解。于是我另辟蹊径,想到通过随机的方法将几个数字和符号揉在一起,直到算到24。其实和遍历挺像的,随机写的话好像更简单些。首先看看结果:这是计算(1,5,5,5)的方法,虽然是随机,但速度也不慢。事实上我做了个查表功能也就是实际上所有的可能都只随机的一次。下面附上全代码。# 24point.p...

weixin_39700220的博客 400

涨姿势|小众建模软件Make human,MakeClothes插件使用详解教程(2)

衣服可以从头开始建模,或者通过改变人体网格或由MakeClothes工具提供的“服装助手”(见下文)来建模。在设计和建模一件衣物时,应该记住两个限制。首先,将服装网格映射到人体网格的算法要求服装网格完全由四面体组成。其次,知道MakeClothes每件衣服只支持一种材料是很重要的。 完成MakeClothes工作流程后,您的HOME / makehuman / v1 / data / clothes中的工具将创建一个新文件夹。该文件夹将采用用户为服装项目提供的唯一名称。该文件夹将填充必要的资源,以使该项目在

Crazy_in_3Dmax的博客 1874

腾讯滑块验证码collect参数逆向与JSVMP对抗实战

本文深入解析腾讯滑块验证码collect参数的逆向过程与JSVMP虚拟机对抗技术。通过详细的环境搭建、抓包分析和JSVMP逆向技巧,揭示collect参数的生成逻辑与加密流程,并提供完整的模拟实现方案和常见问题排查方法,助力开发者突破腾讯天御验证码的防护机制。

weixin_29009501的博客 1573

2026年Python零基础入门:72小时实战自动化办公与数据分析

编程语言作为人机交互的核心工具,其设计哲学决定了学习曲线与应用效率。Python通过简洁的语法规则和动态类型系统,降低了编程入门的技术门槛。这种低学习成本特性使其在自动化办公、数据处理等领域展现出显著的技术价值,能够将重复性人工操作转化为可复用的脚本逻辑。在实际应用场景中,Python生态的pandas库可以高效处理Excel数据批量操作,requests库则提供了安全的网络数据获取能力。结合2026年人工智能技术普及和数据分析岗位需求增长的趋势,Python的实用价值与就业前景形成了良性循环。本文基于72

weixin_33894640的博客 453

通俗讲解清楚光线追踪中的蒙特卡洛积分

彻底讲解光线追踪中的蒙特卡洛积分

qq_37366618的博客 1243

LIEF 错误处理机制详解:从 C++ 异常到 ResultOrError(LIEF::result 与 lief_errors 实战指南)

LIEF(Library to Instrument Executable Formats)在解析 PE、ELF、Mach-O 等二进制格式时,自 0.13.0 起彻底移除了基于 C++ 异常(Exception/RTTI)的错误处理方式,全面转向基于 `std::expected` 理念的 `ResultOrError` 惯例(Idiom)。本文以官方文档 [doc/sphinx/api/err

gitblog_00296的博客 1010

CELF(Cost-Effective Lazy Forward selection)具有成本效益的惰性前向选择算法

CELF(Cost-Effective Lazy Forward selection)算法解析      引言:在社交网络影响力最大化问题的求解过程中,我们往往需要去选择一些目标种子结点作为信息初始传播的源头。贪婪算法在传播效果上的解决可以达到影响的最大化,但是在时间复杂度上面显得确十分糟糕。为此CELF算法应势而生,CELF算法利用了函数次模性的特点,在第一轮选择种子结点时,计算网络中所有节点的边际收益,但将在之后的过程中,不再做网络节点边际收益的重复计算,这相对于传统的贪婪算法,将在时间上得到非常明显的

hahaxq的博客 2476

蓝牙芯片驱动开发-第11章第1题-WiFi蓝牙共存的关键策略有哪些

蓝牙芯片驱动开发-第11章第1题-WiFi蓝牙共存的关键策略有哪些

weixin_42162924的博客 30

Python猜拳游戏:从if-else到面向对象与GUI的完整实践

在Python编程学习中,条件判断和循环控制是理解程序逻辑流程的基础。通过if-else语句实现分支选择,结合while循环构建交互流程,是掌握编程核心原理的关键。这些基础技术为开发交互式应用提供了核心支撑,在游戏开发、自动化脚本和工具开发中广泛应用。以猜拳游戏为例,其简单的规则和完整的“输入-处理-输出”流程,使其成为绝佳的Python入门实践项目。从基础的命令行版本开始,逐步引入函数封装、面向对象设计,最终扩展到Tkinter图形界面,这一过程完整覆盖了Python核心语法、代码结构优化和GUI开发等关

weixin_33725270的博客 398

【AI for Medecine】吴恩达医学图像AI专项课程(诊断、预测、治疗)

近期需要简单了解AI4Science上的一些应用,看到吴恩达大佬的专项课程,于是开始来个“全面”的了解--医学人工智能(诊断、预测、治疗)。

图挖掘领域,新晋砖家 ☞ 未来可期,欢迎和静静一起学习交流吖 769

PicoTUI最佳实践:错误处理与用户界面设计终极指南

在Python文本用户界面(TUI)开发中,PicoTUI作为一个轻量级、纯Python的TUI工具包,为开发者提供了简单而强大的界面构建能力。本文将深入探讨PicoTUI的错误处理机制与用户界面设计最佳实践,帮助您创建稳定、用户友好的终端应用程序。🎯 ## 🔍 PicoTUI简介与核心优势 PicoTUI是一个专为Python3设计的文本用户界面(TUI)小部件库,它以其**极简依赖**

gitblog_00317的博客 534

帆软报表开发-快速入门

数据可视化展示功能特点如下:选择权限管理 > 用户最终权限 > 汤姆(Tom) > 选择图表设计入门 > 打开查看权限。

郭宝的博客 5968

手把手教你学Simulink--基于Simulink的风力发电系统用双馈电机控制仿真建模

特点高效节能:在广泛的风速范围内保持高效的能量转换。独立控制有功和无功功率:通过控制转子电流实现对有功和无功功率的独立调节。较低的成本:相比直接驱动或全功率变流器方案,成本较低。挑战控制复杂度较高:需要复杂的控制算法来实现有功和无功功率的解耦控制。对电网波动敏感:需要良好的稳定性控制策略以应对电网电压波动。利用Simscape Electrical中的模块构建DFIG的物理模型,配置参数如电阻、电感、极对数等。matlab深色版本% 添加DFIG电机模块。

MHD0815的博客 346

小白学习日记4_Python爬虫(requests/get)方式_2020年5月24日

有好几天都没有更新了,但是也不代表博主没有在学习,只是因为去学习了更难的东西(只是博主个人认为哈),其实学下来发现也很简单,不理解就难,理解则易。 那么这几天我到底干嘛去了呢?前两天吧去顺着廖神的教程看了看 filter 什么的,觉得有点迷茫,因为都很理论化的东西并没有实践,于是博主去找了一个爬虫的教程,开始做点实践的项目来调剂调剂这无聊的学习生活。 话不多说先放上我找的学习视频,我觉得刚好适合我这个小白的难度,讲的也很通透,倒退快进的看看知识点很容易爬一个网站,现在放上视频链接,有兴趣的同学自己琢磨琢

WungEasy的博客 633

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Xonsh 0.24 版本演进全景:从 CHANGELOG 看 Python 驱动跨平台 Shell 的能力跃迁

Xonsh(发音同 "consh")是一个以 Python 超集语言为核心、无缝融合 Shell 命令的跨平台 Shell,支持 Linux、macOS、Windows、BSD、Jupyter、Android、Raspberry Pi 与 Nix 等环境。本文以仓库根目录的 [CHANGELOG.md](https://link.gitcode.com/i/5312b4399eafaecfe222

gitblog_01193的博客 454

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python编码错误处理

如题,同时解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 4: invalid continuation byte问题。 b = b'\u7cfb\u7edf\u627e\u4e0d\u5230\u6307\u5b9a\u7684\u8def\u5f84' #decode()默认值为'utf-8' ...

someonelikesyou的专栏 2479

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

笨办法学python ex24

你离这本书第一部分的结尾已经不远了,你应该已经具备了足够的 Python 基础知识,可以继续学习一些编程的原理了,但你应该做更多的练习。这个练习的内容比较长,它的目的是锻炼你的毅力,下一个习题也差不多是这样的,好好完成它们,做到完全正确,记得仔细检查。 print("Let's practice everything.") print('You\'d need to know \'bout escape with \\ that do:') #用单引号时,单引号内的标点符号需要转义包含\ print('

weixin_39627083的博客 199

2026年4月OpenClaw生产落地指南:无影云电脑+Skills七层架构实战

AI Agent是面向任务的智能体系统,其核心在于可编排、可扩展、可运维的工作流能力。OpenClaw作为新一代开源Agent框架,依托v4.0 Skills协议与WebSocket长连接等底层机制,实现了插件化能力调度与跨平台协同。技术价值体现在降低92%新手部署失败率、统一模型网关接入、支持流式响应与持久化记忆。典型应用场景覆盖电商价格监控、多端混合办公、本地敏感数据协同等企业级闭环工作流。本文聚焦2026年4月关键窗口期,详解无影云电脑预校准运行沙盒与Skills七层穿透架构的工程实践。

398
上一篇: 2022年4月24日:面向初学者的Python--Python函数
下一篇: 2022年4月25日:通过Python构建真实的应用程序 --Python简介
DXB2021
博客等级 码龄5年 307粉丝 289原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值