技术标签: python异常 try..except..finally python异常传递 python异常处理 python捕捉异常 系统学python基础原理与应用
Python开发中 ,常见错误类型有两种 :语法错误和异常。语法错误是程序没有运行时,由开发IDE环境检测到错误,比如缩进错误,变量没有写完整,缺少:等解析错误。而异常就是指程序运行时检测到的错误,比如ZeroDivisionError,分母为0的错1/0.比如“aaa”+4等错误。
异常为什么需要处理?1.实际开发中不能直接讲代码的报错抛给用户,而是通过异常处理的形式给出提示。2.如果有异常不处理,程序会挂起,异常后的代码都不会执行。这样影响实际程序的使用。
#异常类型1:
print("准备open the file")
f1 = open("aaa.txt","r")
print("the file is open")
'''文件不存在,程序报错,是代码形式反馈错误,实际开发给用户体验不好。
准备open the file
f1 = open("aaa.txt","r")
FileNotFoundError: [Errno 2] No such file or directory: 'aaa.txt'
'''
#异常类型2
num= 5
print(num/0)
print(num/0) #ZeroDivisionError: division by zero
ZeroDivisionError: division by zero
1.虽然try....except捕捉了异常 ,程序不会报代码的错误。但是注意异常代码后面的代码不会执行了,可以用try...finally替代。
2.一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。但只有一个分支会被执行,类似else
3.如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之外的代码。
#0.捕捉异常和不捕捉异常的区别在哪里?
num = 5
print(num/0)
print("我是try之外的代码,你猜我会执行吗?哈哈哈")
print("我是try之外的代码,你猜我会执行吗?呵呵呵呵")
-------不捕捉异常的结果,异常代码后面的代码print都不会执行-------------------------------------
Traceback (most recent call last):
File "D:/pythoyworkspace/file_demo/Class_Demo/Exception_demo.py", line 3, in <module>
print(num/0)
ZeroDivisionError: division by zero
------------------捕捉异常的代码---------------------------------------------------------
try:
num = 5
print(num/0)
except Exception as ex_results:
print("有情况")
print("抓了一个异常:",ex_results)
print("我是try之外的代码,你猜我会执行吗?哈哈哈")
==============捕捉异常后代码的执行结果:异常后的代码print会执行=============================
有情况
抓了一个异常: division by zero
我是try之外的代码,你猜我会执行吗?哈哈哈
我是try之外的代码,你猜我会执行吗?呵呵呵
------------------------------------------------------------------------------------------
#1.异常处理:python中用 try...except... 捕获异常
try: #1.注意代码的缩进,隐患需要处理的代码放到try的缩进代码块里。
print("准备open the file")
f1 = open("aaa.txt","r")
print("the file is open")
except IOError: #except后面跟的是错误类型。
print("很抱歉:你打开的文件不存在!")
#except缩进跟的是处理方式,把处理异常的代码,放在except中。如果没有处理方式可以直接用pass表示什么也不做.
=========================================================================
准备open the file
很抱歉:你打开的文件不存在!
#2.try--except同时处理多个异常类型
try:
num = 5
print(num/0)
print("准备open the file")
f1 = open("aaa.txt","r")
print("the file is open")
except(IOError,ZeroDivisionError): #可以同时处理多个异常,各种类型用元组封装
print("垃圾,程序有异常了")
#3.如果不确定异常类型,可以except后面什么都不写。
try:
num = 5
print(num/0)
print("准备open the file")
f1 = open("aaa.txt","r")
print("the file is open")
except:
print("垃圾,程序有异常了")
#4.打印异常类型,但是实际异常后面的代码不会执行 ,所以只能捕捉一个异常。
try:
f1 = open("aaa.txt", "r")
print("the file is open")
num = 5
print(num/0)
print("准备open the file")
except (IOError,ZeroDivisionError) as ex_results:
print(ex_results)
=========================================================================
[Errno 2] No such file or directory: 'aaa.txt'
#5.捕捉所有异常,这种情况适合不知道异常具体类型,但是又想存储打印异常类型 。
try:
num = 5
print(num/0)
f1 = open("aaa.txt", "r")
print("the file is open")
print("准备open the file")
except Exception as ex_results:
print("有情况")
print("抓了一个异常:",ex_results)
print("我是try之外的代码,你猜我会执行吗?哈哈哈")
print("我是try之外的代码,你猜我会执行吗?呵呵呵呵")
==========================================================================
有情况
抓了一个异常: division by zero
我是try之外的代码,你猜我会执行吗?哈哈哈
我是try之外的代码,你猜我会执行吗?呵呵呵呵
#6.try--except可以配上else,类似while else ,for else的使用
try:
num = input("请输入一个整数除数:")
result = 100.0/int(num)
print("商的结果是:%f"%result)
except ZeroDivisionError as ex_results:
print("有情况")
print("抓了一个异常:",ex_results)
else :
print("恭喜,没有 错误")
==========================================================================
请输入一个整数除数:6
商的结果是:16.666667
恭喜,没有 错误
请输入一个整数除数:0
有情况
抓了一个异常: float division by zero
在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等,注意:finally是可选的选项。
#1.try...except....finally的使用演示
try:
f1 = open("test.txt","rU")
for i in f1:
i=i.strip()
print(i)
except Exception as E_results:
print("捕捉有异常:",E_results)
finally: #finally的代码是肯定执行的,不管是否有异常,但是finally语块是可选的。
f1.close
print("我不管,我肯定要执行。")
------------------程序无异常会执行-----------------------------------
ccccccccccd
ddddddddddddddddd
333343434343
safsdfasdfsadfsa
我不管,我肯定要执行。
------------------程序有异常还是会执行----------------------------------
File "D:/pythoyworkspace/file_demo/Class_Demo/Exception_demo.py", line 44, in <module>
捕捉有异常: [Errno 2] No such file or directory: 'tes2t.txt'
f1.close
我不管,我肯定要执行。
NameError: name 'f1' is not defined
#2.注意try..finally的使用,可以没有except。只有try...except.,try...except...finally这三种用法
try:
f1 = open("tes3t.txt","rU")
for i in f1:
i=i.strip()
print(i)
finally: #finally的代码是肯定执行的,不管是否有异常,但是finally语块是可选的。
print("我不管,我肯定要执行。")
f1.close
-----------------------有异常的情况 ------------------------------------------------------
File "D:/pythoyworkspace/file_demo/Class_Demo/Exception_demo.py", line 36, in <module>
恭喜,没有 错误
f1 = open("tes3t.txt","rU")
我不管,我肯定要执行。
FileNotFoundError: [Errno 2] No such file or directory: 'tes3t.txt'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:/pythoyworkspace/file_demo/Class_Demo/Exception_demo.py", line 42, in <module>
f1.close
NameError: name 'f1' is not defined
--------------------------无异常的情况-----------------------------------------------------
ccccccccccd
ddddddddddddddddd
333343434343
safsdfasdfsadfsa
我不管,我肯定要执行。
try:
num = 5
print(num/0) #ZeroDivisionError: division by zero
except IOError:
print("报错了,分母不能为0")
'''虽然捕捉处理了异常,但是为什么用呢?
print(num/0) #ZeroDivisionError: division by zero
ZeroDivisionError: division by zero
'''
注意:因为异常类型不对,异常类型要很精确的,否则没有用。如果不确定异常类型,可以直接什么都不写
try:
num = 5
print(num/0) #ZeroDivisionError: division by zero
except ZeroDivisionError:
print("报错了,分母不能为0")
-------------------------------------------------------
报错了,分母不能为0
#如果不知道异常是什么类型,可以不写。但是如果写了异常类型,必须是精确的
try:
num = 5
print(num/0) #ZeroDivisionError: division by zero
except :
print("报错了,分母不能为0")
-------------------------------------------------------
报错了,分母不能为0
def test1():
print("----test1-1----")
print(num)
print("----test1-2----")
def test2():
print("----test2-1----")
test1()
print("----test2-2----")
def test3():
try:
print("----test3-1----")
test1()
print("----test3-2----")
except Exception as result:
print("捕获到了异常,信息是:%s" % result)
print("----test3-3---")
#注意分析执行的结果
test3()
print("------test3执行完了,分割一下-----")
test2()
====================执行结果如下=======================================================
----test3-1----
Traceback (most recent call last):
----test1-1----
File "D:/pythoyworkspace/file_demo/Class_Demo/Exception_demo.py", line 23, in <module>
test2()
捕获到了异常,信息是:name 'num' is not defined
----test3-3---
------test3执行完了,分割一下------------
NameError: name 'num' is not defined
----test2-1----
----test1-1----
try:
# 尝试执行的代码
pass
except 错误类型1:
# 针对错误类型1,对应的代码处理
pass
except 错误类型2:
# 针对错误类型2,对应的代码处理
pass
except (错误类型3, 错误类型4):
# 针对错误类型3 和 4,对应的代码处理
pass
except Exception as result:
# 打印错误信息
print(result)
else:
# 没有异常才会执行的代码
pass
finally:
# 无论是否有异常,都会执行的代码
print("无论是否有异常,都会执行的代码")
else
只有在没有异常时才会执行的代码finally
无论是否有异常,都会执行的代码
需求
demo1()
提示用户输入一个整数并且返回demo2()
调用 demo1()
demo2()
def demo1():
return int(input("请输入一个整数:"))
def demo2():
return demo1()
try:
print(demo2())
except ValueError:
print("请输入正确的整数")
except Exception as result:
print("未知错误 %s" % result)
统一声明:关于原创博客内容,可能会有部分内容参考自互联网,如有原创链接会声明引用;如找不到原创链接,在此声明如有侵权请联系删除哈。关于转载博客,如有原创链接会声明;如找不到原创链接,在此声明如有侵权请联系删除哈。
文章浏览阅读461次。我们会先使用 ps、top 等命令获得进程的 PID,然后使用 kill 命令来杀掉该进程。killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。当然我们可以向进程发送一个终止运行的信号,此时的 kill 命令才是名至实归。,这样结束掉的进程不会进行资源的清理工作,所以如果你用它来终结掉 vim 的进程,就会发现临时文件 *.swp 没有被删除。命令:pid of xx进程,显示进程的进程号,同上pgrep。这是 kill 命令最主要的用法,也是本文要介绍的内容。_如何kill掉一个进程
文章浏览阅读1.9k次。在本文中,我们介绍了Python机器学习的一些基本概念和常用库和框架。我们还提供了一些常用的人工智能算法的Python实现示例,例如线性回归、决策树、神经网络等。如果你想深入了解Python机器学习,我们建议你学习更多的机器学习算法和技术,并通过实践来提高你的技能。Python机器学习是一个快速发展的领域,它提供了许多工具和资源,使你可以轻松地构建和部署机器学习模型。无论你是初学者还是有经验的开发者,Python机器学习都是一个值得学习的领域。_python做ai算法
文章浏览阅读5.9k次,点赞4次,收藏20次。vue elementui 表格 中 时间数据格式转换_el ui 转换表格字段时间
文章浏览阅读3.6k次。目录什么是JSON?交换数据JSON 语法JSON 语法规则JSON 数据- 名称和值实例JSON 值JSON 数据类型有效的数据类型JSON 字符串实例JSON 数字实例JSON 对象实例JSON 数组实例JSON 布尔实例JSON 对象对象语法实例访问对象值实例嵌套的 JSON 对象实例实例JSON 数组作为 JSON 对象的数组实例JSON 对象中的数组实例_json解析工具
文章浏览阅读936次。1 kmeansK-means聚类算法也称k均值聚类算法,是集简单和经典于一身的基于距离的聚类算法。它采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为类簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。2.算法核心思想K-means聚类算法是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本_kmeans算法相关性分析
文章浏览阅读466次,点赞8次,收藏12次。以上是基于Spring Boot的自习室管理系统的主要功能,通过这些功能可以实现自习室座位的管理、课程的管理、学员信息的管理和行为管理等功能,为自习室提供一个高效、便捷、智能的解决方案。登录后,系统将根据用户的角色显示相应的功能菜单。通过以上各个功能模块的实现,基于Spring Boot的自习室管理系统将提供一套完善的解决方案,帮助自习室提高工作效率和服务质量,为学员提供更加便捷、舒适的学习环境。通过生成相应的报表,管理员可以更好地了解自习室的使用状况和学员的学习情况,从而做出相应的决策和管理调整。_基于springboot的共享自习室管理系统参考文献
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf
文章浏览阅读3.2k次,点赞3次,收藏4次。vscode打开markdown文件 不显示图片 预览markdown文件_vscodemarkdown图片无法显示
文章浏览阅读516次。在做ACM题时,经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即0~4294967295。也就是说,常规的32位整数只能够处理40亿以下的数。 那遇到比40亿要大的数怎么办呢?这时就要用到C++的64位扩展了。不同的编译器对6_c++ long64
文章浏览阅读350次。首先要解决的问题是敏感词的存储形式,这就涉及数据结构,先想想搜索屏蔽要怎么处理,比如我有一个content,我就遍历它每个字符,先看与词典中所有词第一个字符相同的,再看第二个,再看第三个.等等。那么,很明显,这就需要一种以层来存储的数据结构--树来存储敏感词汇。我首先设计了一个Node,它要存储同一级的node指针,下一级的node指针,标识词的结束,数据。最开始本来只想到用树的结构,最后发现, ...
文章浏览阅读167次,点赞3次,收藏7次。1. 背景介绍1.1 隐私保护的重要性在当今的数字时代,个人隐私保护已经成为一个越来越受关注的问题。随着大数据和人工智能技术的快速发展,海量的个人数据被收集和利用,这给个人隐私带来了巨大的风险。如何在利用数据的同时保护个人隐私,已经成为了一个亟待解决的挑战。
文章浏览阅读177次。1.clone方法保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。2.getClass方法final方法,获得运行时类型。3.toString方法该方法用得比较多,一般子类都有覆盖。4.finalize方法该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。5.equals方法该方法是非常重..._一般情况下,异常类存放在什么包中