Skip to main content

moregeek program

python异常知多少_迷彩编程的博客-多极客编程

我们在编写程序的时候或多或少都出现过异常,也许是不小心,也可能是逻辑错误亦或是程序以外的问题,比如环境的问题,不管是什么原因,异常是我们不希望看到的.接下来,我们就什么是异常,遇到异常如何解决展开唠唠

1.什么是异常

异常会让我们的程序跳出正常的运行,异常给我们带来的损失,不容小觑.我们经常听到的是机器的异常.比如工厂流水线上的机器设备,某个零件出问题了,机器不能正常运行或者生产流程错乱;快递分拣设备传送带出现断裂,或者电机出现问题不能正常分拣;还有我们现在最火的自动驾驶汽车,如果汽车在路上行驶时雷达失灵.程序错乱.摄像头设备无法正常检测识别,等等.这些都是异常.如果不能快速排除异常,不但会导致生产停滞,还威胁到生命安全,会造成很大的损失.

上述情况正是异常要做的,我们可以在恰当的地方添加异常.若是出现例外,终止流程进入异常管理.在异常管理器中完成对当前异常的处理,让流程维持在正常的轨道上.

2.异常的作用

上面我们了解了什么是异常,但在程序中,异常的作用不仅仅只是用于排除例外.异常具体的作用如下:

错误处理

在程序运行中发生错误时,python会向外抛出异常,Python中有默认的异常处理机制,他会停止程序运行,打印错误信息,我们还可以自己捕捉异常并从异常中恢复.

时间通知

异常也可以用于向外抛出程序的状态信息

终止运行

使用Python的try/finally语句可以确保无论是否有异常都会执行finally中的语句

3.异常与错误

异常和错误是不一样的,即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。下面我们通过例子来说明;

Print("你好!")

报错:

Python异常知多少_程序运行

从报错中可以看出,是Print没有定义,也就是不存在Print这样一个函数,Python中是区分大小写的.打印函数正确的是print().除非你自定义一个Print()函数.其实如果你使用PyCharm去编写代码,你写来未运行就已经提示错误,如图:

Python异常知多少_程序运行_02

while True print('Hello world')

报错:

Python异常知多少_抛出异常_03

这个是语法格式错误.

input('请输入内容:')

上面的代码本身没有错误,但是在输入的时候,此时我们按下Ctrl+D键,这是一个文件结束符号.但是它不应该出现在这里,所以Python就会抛出异常.并指出这是一个EOFError,使用Python默认的处理方式,立即终止程序.

Python异常知多少_程序运行_04

异常和错误有什么区别呢:

错误:

错误可分为语法错误和逻辑错误

语法错误说明代码不符合语言的语法规范

逻辑错误说明代码编写逻辑上的错误,程序不会报错但是执行的结果不符合预期

异常:

程序是可以运行的,但是在运行过程中遇到错误会导致程序意外退出

4.异常处理

如果是语法的错误,程序本身是无法执行的,我们是无法从程序抛出的异常去处理的,只能调整代码本身.但是异常是在程序运行过程中可能出现的,我们可以通过捕捉可能出现的异常并加以处理,保持程序正常运行;

上面input()的异常我们可以捕捉并处理:

try:
input('请输入内容:')
except EOFError: #捕捉EOFError
print("输入错误")
else:
print("输入正确")

print("继续...")

输出结果:

Python异常知多少_python_05

Python异常知多少_python_06

上面的例子使用了try...except.当try语句用于捕获异常并从中恢复时,至少要有一句except与之对应,因为仅仅抛出异常是没有用的.如果异常没有被处理.那么Python就会调用默认的处理方式,停止执行并在终端打印出错误信息.

5.常见异常

OverflowError:数值超出最大限制,比如数组下标越界

ZeroDivisionError:除(或取模)零

OSError:操作系统错误

StopIteration:迭代器没有更多的值

FloatingPiontError:浮点计算错误

IOError:输入/输出操作失败

MemoryError:内存溢出错误(对于解释器不是致命的)\

EOFError:没有内建输入到达EOF标记

以上这些对于编程中的复杂环境来说还是不够的.因此Python允许我们自己定义异常类型并且通过raise语句来引发;我们要注意的是,自定义的异常必须是直接或间接从属于Exception类的派生类.

下面通过模拟车辆无油状态的提示体验一下:

#模拟车辆无油
class NoGas(Exception):
def __init__(self, state):
Exception.__init__(self)
self.state = state

state = "无油"

try:
if state != "yes":
raise NoGas(state)
except NoGas as ng:
print("油表显示状态: {0},正在检测..".format(state))
print("正在加油!")
print("加油完成!")
finally:
print("若加完油,车辆可继续行驶\n")

运行结果:

Python异常知多少_抛出异常_07

finally语句不管try里面代码发生了什么都会执行.

Python异常知多少_抛出异常_08

6.finally语句

finally语句一定会在最后执行,所以finally语句也被称为终止行为或者是清理语句,我们在操作文件的时候一般会把File.close()关闭文件的语句放到finally,保证程序运行完必须关闭打开的文件,或者使用with 语句来保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法,其实with也是封装了 try…except…finally 编码范式,提高了易用性

try:
input("请输入:")

finally:
print("结束")

print("程序完成")

运行结果:

Python异常知多少_程序运行_09

使用finally文件关闭:

file = open('./test.txt', 'w')
try:
file.write('你好')
finally:
file.close()

使用with:

with open('./test.txt', 'w') as file:
file.write('你好')

总结

异常是一种比较高级的控制流设备.他可能是由Python引发,也有可能是由程序本身引起.在写代码时要先分析并选取异常条件.这里只是抛转引玉,还有更多异常有关的使用场景等你发掘.异常的处理在开发中是非常重要的一环,一定要熟练掌握异常机制的应用

©著作权归作者所有:来自51CTO博客作者迷彩编程的原创作品,请联系作者获取转载授权,否则将追究法律责任

[oeasy]python0019_ 打包和解包_struct_pack_unpack_overmind1980的博客-多极客编程

打包和解包回忆上次内容ASCII 由这样几类字符构成英文大写字符英文小写字符数字符号电报时代对于英文、数字的编码使用的是摩斯电码这摩斯电码是3进制的编码方式 长短空怎么演化成ascii这种0101的二进制编码的呢?🤔回到 ASCII 码电报传过来的信号需要记录下来 于是有了电传打字机(tele-typewriter)电传打字机需要统一的编码字母和数字ASCII的第一个商业用途 是作为一个七位电传打

python文件操作知多少?_迷彩编程的博客-多极客编程

前言对于文件大家应该都不陌生,但是在接触计算机之前,通常将文件定义为内容的载体.如公文书信或者有关政策理论方面的文章.计算机文件也一样,而且在计算机中文件的类型更加丰富多样,用途广泛.有的是用来支撑程序运行的,有的只是单纯用于数据存储,文件使用文件扩展名区分文件类型,比如我们常用图片格式,有.jpg/.png/.gif,记事本保存的文字.txt,办公文档类型.docx/.pptx/.xlsx等.它

python第三方库管理pip和conda_domi+1的博客-多极客编程

✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 🍎个人主页:算法工程师的学习日志在本机开发完程序后,需要把程序移植到服务器之类的目标机上运行,或者分发给其余同事,经常会遇到第三方库管理,或者是不同项目之间用到的第三方库版本不一致,例如有时候需要tensorflow 1版本,有的时候希望用最新的2.3版本,这样导致了运行环境的管理复杂度,对于第三方库管理推荐通过

selenium4+python3系列(八) - cookie、截图、单选框及复选框处理、富文本框、日历控件操作_久曲健的博客-多极客编程

我所在的城市昨天出了近20+的阳性案例,但这丝毫没有 “影响” 到996的工作时间,当然,也没有影响到我想继续更新文章的决心。 一、cookie常用操作入门 上一篇有写过关于cookie的实战案例,个人觉得没有很好地照顾到入门同学的感受,所以就又更新了关于cookie的基本使用操作。 1、获取所有cookie信息 示例代码: cookies = driver.get_cookies() for c

[oeasy]python0021_python虚拟机的位置_可执行文件_转化为字节形态_overmind1980的博客-多极客编程

程序本质回忆上次内容​​\n​​ 就是换行 他对应着 ​​ascii​​​ 字符的代码是(​​10​​​)​​10进制​​他的英文是 LF,意思是​​Line Feed​​我们可以在《安徒生童话》中找到每个字符对应的字节形态不光txt文件是文件我们的python游乐场本质上也是一个二进制可执行的文件这个文件在哪?我们可以读懂这个可执行文件吗?🤔​​python3​​ 到底是个啥?which pyt

学习笔记-django框架的使用_wx637390d4de3a1的博客-多极客编程

前言:本博客为技术小白的记录学习过程,有错误或不解的地方请指出 !!!一.安装和创建项目1.安装1.1 命令行下载pip3 install django==1.11.11  (可以跟镜像地址: -i +镜像地址 )1.2 测试安装是否成功django-admin1.3注意事项:计算机名称不能含中文项目名称和py文件最好也不要使用中文django的版本:目前django最新版本为4.X, 本次学习选

一文了解 go 的复合数据类型(数组、切片 slice、map)_wx6372efec77838的博客-多极客编程

耐心和持久胜过激烈和狂热。前言上一篇文章 ​​一文熟悉 Go 的基础语法和基本数据类型 ​​,讲解了 Go 的基础语法和基本数据类型,本篇文章将对 Go 的复合数据类型(数组、切片 Slice、Map)进行介绍。数组数组是由特定元素组成的固定长度的序列,元素可以是Go 的原生类型(如整形、字符串型和浮点型等)和自定义类型。一个数组可以包含零个或多个元素。通过数组的下标索引可以高效访问和修改每个元素

idea springboot sql连接常见五大异常处理_wx636d0c5e64939的博客-多极客编程

(项目:Springboot+mybatis+MySQL) 一、no data sources are configured to run this sql and provide advanced code assistance警告处理 1.异常错误 SpringBoot项目中.xml或者.sql文件调用时报错 No data sources are configured to r

常见的关于堆栈以及list集合的考察方面_浅羽技术的博客-多极客编程

堆和栈的区别  堆内存用来存放由new创建的对象和数组,通过new关键字和构造器创建的对象放在堆空间,大量的对象都是放在堆空间,整个内存包括硬盘上的虚拟内存都可以被当成堆空间来使用 栈里面存放的是所有基本数据类型和引用数据类型,我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间,栈空间操作最快但是也很小 arrayList和linkedList的区别 我

#yyds干货盘点# leetcode 腾讯精选练习 50 题:nim 游戏_灰太狼_cxh的博客-多极客编程

题目:你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头。你们轮流进行自己的回合, 你作为先手 。每一回合,轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。 示例 1:输入:n = 4输出:false 解释:以下是可能的结

#yyds干货盘点# 动态规划专题:装箱问题_风的博客-多极客编程

1.简述:描述有一个箱子容量为 V ,同时有n个物品,每个物品有一个体积(正整数)。每个物品只能使用一次。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。数据范围:  ,  ,每个物品的体积满足 输入描述:第一行输入一个正整数 V 表示箱子的容量,第二行输入一个正整数 n 表示物品的个数。后续 n 行每行输入一个正整数表示物品的体积    输出描述:输出箱子最小剩余空间示例1输入:24

selenium4+python3系列(八) - cookie、截图、单选框及复选框处理、富文本框、日历控件操作_久曲健的博客-多极客编程

我所在的城市昨天出了近20+的阳性案例,但这丝毫没有 “影响” 到996的工作时间,当然,也没有影响到我想继续更新文章的决心。 一、cookie常用操作入门 上一篇有写过关于cookie的实战案例,个人觉得没有很好地照顾到入门同学的感受,所以就又更新了关于cookie的基本使用操作。 1、获取所有cookie信息 示例代码: cookies = driver.get_cookies() for c