Python异常处理

写一段代码用一个数除以0保存到except-div.py文件中:

复制代码
a = 10/0
print('a:',a)

执行这个文件看会得到什么样的结果:

复制代码
Traceback (most recent call last):
  File "E:\juzicode\py3study\m6-异常\except-div.py", line 11, in <module>
    a = 10/0
ZeroDivisionError: division by zero

上面的意思就是在执行这个py文件的时候追踪到一个异常,发生异常的位置在第11行内容是"a=10/0"(具体的行数是根据这行代码写在py文件中的哪一行决定的),异常错误类别是ZeroDivisionError,具体的错误信息是:division by zero。一个异常包含了错误文件,错误行数,错误代码内容,错误类型和具体的错误信息。

try...except...

从上面执行结果也可以看出,错误发生后,其后面的print()语句没有得到执行,所以异常发生时会中断程序的执行。在开发阶段,错误异常对于调试代码起到了提示作用,但是在程序的部署阶段,这种异常的发生通常是不可接受的,因为异常发生后程序就会中断退出。所以在实际的程序使用阶段,我们希望能够消除这种异常发生引起的程序中断,就会使用到异常捕获,通常异常捕获的方法是使用try...except语句,在except语句中对错误进行处理。

复制代码
print('-----欢迎来到www.juzicode.com')
print('-----公众号: juzicode/桔子code\n')   

try:
    a = 10/0
    print('a:',a)
except:
    print('错误:捕获到异常')

==========结果:
-----欢迎来到www.juzicode.com
-----公众号: juzicode/桔子code

错误:捕获到异常

前面这种try...except...的用法会将所有的异常捕获到,有时如果在一个try内部可能有多种错误,需要将不同的错误分开处理,就需要使用多个except+异常类型做分支处理。

复制代码
try:
    b = int('xyz')
    a = 10/0
    print('a:',a)
except ValueError  :   #except语句后跟错误类型:ValueError  
    print('错误:ValueError:' )
except ZeroDivisionError : #ZeroDivisionError 
    print('错误:ZeroDivisionError') 
except:
    print('错误:其他错误')

==========结果:
错误:ValueError:

上面这种方法只能提示是什么类型的错误,如果想知道更具体的错误提示,则可以在except语句中使用as,得到更详细的错误提示:

复制代码
try:
    b = int('xyz')
    a = 10/0
    print('a:',a)
except ValueError as e:
    print('错误:ValueError:',e)
except ZeroDivisionError as e:
    print('错误:ZeroDivisionError',e)
except:
    print('错误:其他错误')

==========结果:
错误:ValueError: invalid literal for int() with base 10: 'xyz'

try...except...else...

try...excep...还有其他形式的变种,比如可以使用try...except...else...,在else后面写未发生异常的处理:

复制代码
try:
    b = int('5')
    a = 10/b
except ValueError  :
    print('错误:ValueError:' )
except ZeroDivisionError :
    print('错误:ZeroDivisionError') 
else:
    print('一切ok')
    print('a=',a)
    print('b=',b) 

==========结果:
一切ok
a= 2.0
b= 5

try...except...finally...

try...except...的另外一种变化形式是使用finally语句,finally中的语句内容,不管是否发生了异常都会得到执行:

复制代码
print('正常情况:')
try:
    a = 10/2
except:
    print('发生异常' )
finally:
    print('不管是否发生异常')
 
print('异常情况:')
try:
    a = 10/0
except:
    print('发生异常' )
finally:
    print('不管是否发生异常')

==========结果:
正常情况:
不管是否发生异常

异常情况:
发生异常
不管是否发生异常
相关推荐
Rock_yzh2 小时前
AI学习日记——参数的初始化
人工智能·python·深度学习·学习·机器学习
青衫客364 小时前
基于 Python 构建的安全 gRPC 服务——TLS、mTLS 与 Casbin 授权实战
python·安全·微服务
-dzk-5 小时前
【3DGS复现】Autodl服务器复现3DGS《简单快速》《一次成功》《新手练习复现必备》
运维·服务器·python·计算机视觉·3d·三维重建·三维
摩羯座-185690305946 小时前
爬坑 10 年!京东店铺全量商品接口实战开发:从分页优化、SKU 关联到数据完整性闭环
linux·网络·数据库·windows·爬虫·python
ACERT3336 小时前
5.吴恩达机器学习—神经网络的基本使用
人工智能·python·神经网络·机器学习
韩立学长6 小时前
【开题答辩实录分享】以《基于python的奶茶店分布数据分析与可视化》为例进行答辩实录分享
开发语言·python·数据分析
2401_831501737 小时前
Python学习之day03学习(文件和异常)
开发语言·python·学习
可触的未来,发芽的智生7 小时前
触摸未来2025.10.06:声之密语从生理构造到神经网络的声音智能革命
人工智能·python·神经网络·机器学习·架构
Zwb2997927 小时前
Day 24 - 文件、目录与路径 - Python学习笔记
笔记·python·学习
hui函数7 小时前
python全栈(基础篇)——day03:后端内容(字符串格式化+简单数据类型转换+进制的转换+运算符+实战演示+每日一题)
开发语言·后端·python·全栈