零基础学习 Python 之错误 & 异常

【pyhton学习笔记】历数那些遇到的错误 制作python爬虫时遇到的错误 阅读详情

写在前面

对于程序在执行过程中因为错误或者其它原因而中止的现象,相信大家已经看过很多次了,那些都可以归为「错误 & 异常」现象,我们接下来就是要对这种现象进行近距离的观察和处理。

错误

其实不管是弱鸡还是大佬,在写代码的时候错误往往是难以避免的,可能是因为手残,也可能是因为拼写错误,当然还有可能是某些比较玄学的错误,比如逗号写成全角的等等等等。总之,写代码中有相当一部分工作就是要不停的修改错误。

Python 中的错误之一就是「语法错误」(Syntax Errors),比如:

>>> for i in range(5)

 File "<stdin>", line 1

   for i in range(5)

                   ^
SyntaxError: invalid syntax

上面的那行代码里因为缺少冒号,导致解释器无法解释,于是报错,这个报错其实是 Python 的语法分析器完成的,并检测到了错误所在的文件和行号( File “”, line 1 ),还以向上的箭头 ^ 标识错误的位置,最后显示错误类型。

另一种错误就是我们常说的「逻辑错误」,逻辑错误可能是由不合法或者不完整的输入导致的,也可能是无法计算等,或者是其它的逻辑问题。逻辑错误不是由 Python 来检查的,所以此处我们所谈的错误不包括逻辑错误。

异常

当 Python 检测到一个错误时,解释器就无法继续执行下去,于是就抛出提示信息,即为「异常」。有错误时,程序运行过程就会出现异常,让我们先来看一个小例子:

>>> 10 / 0

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

ZeroDivisionError: division by zero

当 Python 抛出异常的时候,首先有「跟踪记录」或者叫「回溯」,后面显示异常的详细信息,包括异常所在的位置,最后一行是异常类型及导致异常的原因。在上面的例子中,明确的告诉我们异常的类型是 ZeroDivisionError,并且对此异常类型做了解释。

异常的类型有很多,我在这说几个常见的类型:

NameError

尝试访问一个没有申明的变量

ZeroDivisionError

除数为零

SyntaxError

语法错误

IndexError

索引超出序列范围

KeyError

请求一个不存在的字典关键字

IOError

输入/输出错误

AttributeError

尝试访问未知的对象属性

为了能够更好的深入理解,我在这举几个例子,展示一下其中几个异常出现的条件和结果:

1.NameError

>>> rocky

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

NameError: name 'rocky' is not defined

在 Python 中虽然不需要在使用变量之前声明类型,但也需要对变量进行赋值,然后才可以使用,不被赋值的变量不能在 Python 中存在,因为变量相当于一个便签,要把它贴到对象上才有意义。

2.IndexError & KeyError

>>> a = [1,2,3]

>>> a[4]

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

IndexError: list index out of range

>>> b = {'name':'rocky'}

>>> b['age']

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

KeyError: 'age'

这两个用我们俗语来说就是「鸡蛋里挑骨头」,一定得报错了,不过在实际编程的时候,特别是循环的时候,常常由于循环条件设置的不合理从而出现这种类型的错误。

3.IOError

>>> f = open('test')

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'test'

如果你确认有文件,就一定要把路径写正确,因为你并没有告诉 Python 要对你的计算机进行全身搜查,所以 Python 会按照你指定的未知去找,找不到就会出现异常。

这里只是干说其实没有什么效果,具体的还是要在实际编程中碰到才会印象深刻,这里你先把常见的几个记住,到时候别出现问题的时候不知道是什么错误。

当你在运行程序的时候遇到异常时,不要慌张,这个其实是好事情,是 Python 在帮助你修改错误。只要你认真的阅读异常信息,再用我们之前学过的 dir(),help() 或官方文档,搜索工具等来协助,就一定会解决问题。

处理异常

程序出现了异常就要「处理异常」。

首先,让我们先来看一段代码:

while True:

   print('this is a division program.')

   a = input("input 'a' continue,otherwise logout:")

   if a == 'a':

       x = input('first number')

       y = input('second number')

       try:

           print(float(x)/float(y))

           print('***************')

       except ZeroDivisionError:

           print('the second number can not be zero.')

           print('***********************************')



   else:

       break

运行上面的代码,显示的结果如下:

this is a division program.

input 'a' continue,otherwise logout:a

first number5

second number2

2.5

***************

this is a division program.

input 'a' continue,otherwise logout:a

first number5

second number0

the second number can not be zero.

***********************************

this is a division program.

input 'a' continue,otherwise logout:b

从运行的情况来看,当在第 2 个数,即除数为 0 时,程序并没有因为这个错误而停止,而是给了一个很友好的提示,让我们有机会改正错误,这完全得益于「异常处理」的设置,如果没有处理异常的机制,当异常出现的时候程序就会中止。

1.try…except…

对于上面的例子,只看到了 try 和 except 部分,如果没有异常发生的话,except 在 try 执行后被忽略;如果 try 子句中有异常的话,则该部分的其它子句被忽略,直接跳到 except 部分,执行其后面指定的异常类型及其子句。

except 后面也可以没有任何异常类型,即无异常参数。如何这样的话,不论 try 部分发生什么异常,都会执行 except。

2.处理多个异常

try…except… 是处理异常的基本方式,在此基础上,还可以扩展,也就是能够处理多个异常。

这里所说的处理多个异常,并不是因为同时报出多个异常,而是程序在运行中,只要遇到一个异常就会反应,所以每次捕捉到的异常一定是一个,由不同的 except 子句处理。

3. else 子句

其实有了 try…except…,在一般情况下是够用的,但怕就怕在总有不一般的情况出现,所以就增加一个 else 子句,这个其实就和我们说的话一样,总要根据需要添加不少东西。

try:

   print('just try')

except:

   print('just except')

else:

   print('i am else')

上述代码的运行结果如下:

just try

i am else

上述代码能够帮助我们理解 else 的执行特点:如果 try 被执行了,则 except 被忽略,但是 else 被执行。然后我们在来看下面的代码:

try:

   print(1/0)

except:

   print('just except')

else:

   print('i am else')

上述代码的运行结果如下:

just except

这个时候,else 就不被执行了,两个例子帮助我们了解了 else 的执行特点。

4.finally

finally 子句,一看这个名字,就感觉这是做善后工作的。的确如此,如果有了 finally ,不管前面执行的是 try 还是 except,最终都要执行它。因此,有一种说法是将 finally 用在可能的异常后进行清理,请看下面的例子:

x = 10

try:

   x = 1 / 0

except Exception as e:

   print(e)

finally:

   print(e)

   del x

上述代码的运行结果如下:

integer division or modulo by zero

del x

我们来看一看 x 是否被删除:

>>> x

Traceback (most recent call last):

 File "test_search.py", line 1, in <module>

   print(x)

NameError: name 'x' is not defined

当然,在应用里面可以将上面的各个句子综合起来使用,写成下面这样:

try:

   do something

except:

   do something

else:

   do something

finally:

   do something

---------------------------END---------------------------

题外话

感谢你能看到最后,给大家准备了一些福利!

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。


👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

python安装报错 我的电脑 – 右击 – 属性 – 高级系统设置 – 环境变量(N) – Path – 编辑 – 新建(N)首先,查看python环境变量有没有配置。如果是在 python控制台下输入报错。python安装完,测试报错。在python控制台可以输。需要在cmd控制台输入。 阅读详情

相关推荐

python:异常处理

⑴和else子句不同,finally子句只要求和try搭配使用。至于该结构中是否包含except以及else,对于finally不是必须的⑵。

不怕猫的耗子A 2849

Python学习笔记 - 异常处理

本文介绍了 Python 异常处理机制,其中包括 Python 异常类继承层次、捕获异常、释放资源、自定义异常类和显式抛出异常。

yunfan 6511

Frida+Objection保姆级教程:从环境搭建到实战Hook(含Wallbreaker插件使用)

本文提供了一份从零开始的Frida与Objection移动安全动态分析实战指南。详细讲解了Python环境配置、Frida-Server部署、Objection核心命令使用以及Wallbreaker插件安装与应用。通过实战案例演示如何Hook网络请求(如HttpURLConnection和OkHttp3),帮助安全研究人员快速掌握应用运行时行为分析与漏洞挖掘技能。

weixin_28318011的博客 107

关于包导入,这三个知识点太多人不知道了

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料、代码以及交流解答点击即可加入 1. 使用all控制可被导入的变量 使用 from module import * 默认情况下会导入 module 里的所有变量,若你只想从模块中导入其中几个变量,可以在 module 中使用all来控制想要被其他模块导入的变量。 # profile....

【优快云官方推荐】 2481

聚类模型-层次聚类

聚类模型 1、层次聚类 2、原型聚类-K-means 3、模型聚类-GMM 4、EM算法-LDA主题模型 5、密度聚类-DBSCAN 6、图聚类-谱聚类 一、层次聚类 一、聚类理论 ​ 一般来说,聚类是在训练样本的标签信息不知的情况下,学习样本内在的性质和规律,将有限的集合划分成ccc类。根据“方以类聚,物以群分”的思想,类内对象尽可能的相似,...

myazi 6504

避坑指南:ZYNQ MPSOC QSPI固化时MT25QU256闪存的特殊配置

本文针对Xilinx ZYNQ UltraScale+ MPSoC平台,详细解析了使用Vitis工具将BOOT.bin固化至Micron MT25QU256ABA QSPI NOR Flash时的特殊配置与避坑指南。重点阐述了Init文件的真实作用、电压与频率的精确匹配策略,以及针对该闪存型号的初始化序列,帮助工程师解决烧录失败、启动异常等常见问题,确保系统可靠启动。

weixin_29175469的博客 272

【新手向】【Python】pip install 报错File “<stdin>“, line 1, in <module>NameErro

在python环境中运行pip命令报错的解决办法。

weixin_44114514的博客 1万+

猫群优化算法(CSO)详解:从生物灵感到智能优化

猫群优化算法(CSO)是一种模拟猫科动物行为的群体智能优化算法。该算法基于猫的两种主要行为模式:搜寻状态(全局探索)和跟踪状态(局部开发)。CSO通过混合率(MR)动态调整两种模式的比例,实现探索与开发的平衡。算法核心包括搜寻模式的变异操作和跟踪模式的速度-位移模型,具有收敛性能好、全局搜索能力强等特点。相比传统优化算法,CSO在高维复杂问题中表现优异,已成功应用于函数优化、图像处理等多个领域。算法性能受混合率、变化域等参数影响,自适应参数策略可进一步提升优化效果。

qq_42212808的博客 620

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万+

Vue3 - 超详细“纯前端“将文件上传到阿里云OSS对象存储,最新阿里云前端直传音频、视频、图片、文件、office文档等任意文件,vue3单个或批量从本地选择文件,秒传到阿里云oss无需后端接口!

vue3,阿里云oss存储,前端直传oss,上传图片/office文档/音视频/zip压缩包到阿里云oss,项目中上传文件到阿里云oss详细教程,如何将本地文件上传到阿里云OSS存储,纯前端实现阿里云OSS上传,纯前端直传至阿里OSS对象存储教程,如何解决上传文件到阿里云OSS本地环境调试出现跨域问题,直传阿里云oss跨域报错解决,前端直接上传文件到oss服务端,不经过后端直传,浏览器直接上传文件,阿里云oss上传sdk官方文档,阿里云错误,解决这个问题,上传很慢,一直签名失败,权限,不经过后端,纯前端直传

🏆 前端领域优质创作者 1万+

车载以太网测试-1【TC8物理层测试基础】

车载以太网物理层是车载网络的基础,负责将数字数据转换为适合在物理介质上传输的信号,并确保数据传输的可靠性、稳定性和高效性。它在车载网络系统中扮演着至关重要的角色,直接影响着车辆内部通信的性能和效率。1. 主要物理层标准车载以太网标准由IEEE 802.3和标准名称速率线缆类型编码方式应用场景100BASE-T1100 Mbps单对非屏蔽双绞线车载摄像头、传感器1 Gbps单对屏蔽/非屏蔽双绞线自动驾驶域控制器、高清视频10BASE-T1S10 Mbps单对双绞线幅移键控(ASK)

车载网络测试工程师的博客 4393

【Python】已解决:PermissionError: [Errno 13] Permission denied: ‘f:\\program files\\python\\python36’

已解决:PermissionError: [Errno 13] Permission denied: ‘f:\program files\python\python36’在Python编程中,文件操作是一个常见的需求。然而,有时在尝试访问或修改文件时,会遇到权限相关的错误,例如。为了正确解决该报错问题,可以选择用户有写权限的目录进行文件操作。该错误表明程序没有权限访问指定的文件或目录。通过将文件路径更改为用户目录,避免了权限问题,确保程序可以正常运行。报错问题,确保文件操作功能正常运行。

屿小夏.的知识博客 2235

SAP Joule Studio 能不能用来开发 skill:可以,但它开发的是 Joule 语境下的企业级 skill,而不是替代所有 SAP 开发技术的万能锤

SAP Joule Studio 专为开发Joule技能(Joule skills)而设计,这些技能是执行确定性单步业务动作的原子能力。它通过自然语言接口连接SAP和非SAP系统,适合处理边界清晰、可审计的任务(如创建工单、查询发票)。Joule技能作为会话式业务编排层,与ABAP、CAP等核心技术互补而非替代。开发支持低代码和专业代码两种方式,并具备企业级治理能力,但需要相应的BTP订阅和技术基础。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 202

编程新手必看,Python3中错误和异常知识点及语法学习总结(25)

Python3中的错误主要分为语法错误和异常两大类。具体如下: 语法错误: 指的是在编写代码时违反了Python的语法规则,导致程序无法编译或解释执行。 常见的语法错误包括缩进错误、括号不匹配、拼写错误等。

qq_45746668的博客 1085

RK3568平台开发系列讲解:Linux wifi的调试

查询结果中state为ENABLE,表示hostapd程序启用成功。首先查看设备是否存在。

内核笔记 168

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

python编程错误与异常_01-python高级编程-错误和异常

相关快捷键:ctrl+alt+t目标错误调试和测试异常异常的表现形式(几个异常例子)内置异常类层次结构异常处理结构多种异常的处理结构自定义异常打印异常信息错误调试和测试在程序运行过程中,总会遇到各种各样的错误。有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空...

weixin_31845113的博客 252

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python学习二(文件对象、读取、写入、复制文件,函数、模块、错误&异常)

Python学习 一、文件对象 1. 文件对象的读取 建立文件对象 open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 open() 函数常用形式是接收两个参数:文件路径(相对或者绝对路径)(file)和模式(mode)。 open(file, mode='r') mode r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这

Pluto.的博客 293

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python学习笔记——异常、模块和包

文章主要介绍Python中的异常捕获,自定义模块,自定义包以及第三方包的下载等内容,比较基础和入门,学习的具体资源可以参考bilibili黑马程序员的Python学习相关视频,感谢阅读本篇文章,希望对您有所帮助!

weixin_73938894的博客 771

python爬虫MySql插入时出现异常——“Incorrect string value: '\\xF0\\x9F\\x92\\xB5”

控制台报错如下: Incorrect string value: '\\xF0\\x9F\\x92\\xB5, 现在整理解决方法如下: 摘录自:http://blog.youkuaiyun.com/fuxuejun/article/details/20361669 错误原因:我们可以看到错误提示中的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式中的4字节编码(UTF-8

lemonMagister的博客 2698

【语法09】Python错误和异常

作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。 Python有两种错误很容易辨认:语法错误和异常。 语法错误 ''' Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 &amp;gt;&amp;gt;&amp;gt;while True print('Hello world') File &quot;&amp;lt;stdin&amp;gt;&quot;, ...

cs_xuhuan的博客 477

零基础Python学习,第九章:Python异常、模块、包

函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,finally关闭文件对象函数:appendtofile(filename,data),将字符串反转返回函数:substr(s,x,y),按照下标x和y,对字符串进行切片。创建一个自定义包,名称为:my_utils(我的工具)函数:str_reverse(s),接受传入字符串,file_util.py(文件处理相关工具,内含:)str_util.py(字符串相关工具,内含:)file_util模块。

weixin_39559852的博客 1257

零基础入门python57:FastAPI 统一异常和错误响应

参考做法是先运行上一篇的测试,再用一个成功请求和一个失败请求验证边界;本篇在同一项目上增加新能力。

a1250467048的博客 203

语法错误&异常

try: 可能出现异常的代码 except: 如果有异常执行的代码 finally: 无论是否异常均被执行的代码 可根据不同的异常抛出不同的结果,举例: def test(): try: num1 = int(input('print the first number:')) num2 = int(input('print the second number:')) result =...

beatlemaniayy的博客 192

【python学习】python的异常处理

中国史之【九世之乱】: 商王中丁后,“兄终弟及”与“父死子继”相结合的王位继承制度遭到破坏。王朝内部连续发生王位纷争,又屡次迁都,使得王朝中衰、诸侯离叛。这一动乱历经商朝九王,直至盘庚迁殷后才结束。 -来源:全历史APP 今天讲python的异常处理。有需要的也可以直接去我的github查看全部笔记: https://github.com/JackKoLing/python_notes_with_ten_days 俗话说:“好记性不如烂笔头”,多写写多记记,总不会错。多一些不为什么的坚持,少一些功利主.

learning CV 417

python之异常处理

这里的ZeroDivisionError是指分母为0,而当我们输出非数字时a=int(a)会抛出异常,毕竟非数字类型不能用int,此时的错误类型为ValueError,因此最里层的except检测不出来,然后把它传递给中间一层,因此输出结果为中间一层,当然如果最里层的except对应的也有异常,那么它还是会传递给中间一层。也可以用else针对try的语句没有报错时执行一些信息(这里的except就类似于if,当出现对应的异常时except执行,否则是else执行)当你想要了解你的异常信息时可以。

2302_79929211的博客 804

python基础7 异常捕获

Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。python有很多内置的标准异常,列表如下:python处理异常有两种语法结构:try....except...else和try....except...finally。具体示例如下: 也可以在一个分支类,处理多个异常类,语法结构如下: try....except...finally语法定义: 具体示例: 具体示例 示例中,testfil

genispan的专栏 1028
上一篇: Python接口自动化搭建过程,含request请求封装
下一篇: 手把手教你实现Python重试、超时装饰器
Python_P叔
博客等级 码龄3年 5454粉丝 827原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值