找回密码
 会员注册
查看: 11|回复: 0

python异常处理

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72245
发表于 2024-9-7 21:02:56 | 显示全部楼层 |阅读模式
当python检测到一个错误时,解释器就无法继续运行了,反而出现了一些错误的提示,这就是所谓的异常。处理异常的方法就是用try语句来捕获异常避免程序终止。目录前言正文一、常见的报错类型    1、语法错误    2、逻辑错误 二、基本异常处理    1、基本语法:    2、多异常捕获        1)、多个except语句        2)、 使用元组同时匹配多个异常    3、万能异常Exception  三、进阶异常处理四、raise抛出异常拓展总结前言         ython中,程序执行过程中发生的错误或异常情况。当出现异常时,程序会停止执行并抛出一个异常对象,如果没有适当的处理机制,程序将会终止运行。为了避免直接停止程序,提高程序的容错性和可靠性,我们通常会使用try语句来处理异常。正文一、常见的报错类型    常见的报错分为两种:    1、语法错误                这种错误在代码编写阶段就能被检测到,因为它违反了Python的语法规则。常见的语法错误包括拼写错误、缩进错误、语法结构错误等。    2、逻辑错误                这种错误在代码运行时不会引发异常,但导致程序的行为与预期不符。逻辑错误通常是由于程序员的错误理解或错误的实现导致的。例如,算法错误、变量赋值错误、条件判断错误等。当出现错误时python解释器会抛出异常对象,并提示错误原因,以下是常见的异常信息与报错原因: 二、基本异常处理    1、基本语法:try:print("被检测的语句")except检测报错类型ase:#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print(e)'运行运行         例如:输入两个整数进行除法运算try:num1=int(input('请输入整数:'))num2=int(input('请输入整数:'))print("num1/num2=",num1/num2)exceptValueErrorase:#检测是否有ValueError错误如果有则执行except里面的语句#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print('出现异常:',e)#捕获到异常则输出:出现异常:invalidliteralforint()withbase10:'1.2'        上述代码中如果输入的不是整数则会输出e捕获到的异常信息,如果输入的正确则正常执行代码。    即try对应的代码块里没有检测到异常,会跳过except继续执行后面的代码。        如果try对应的代码块中出现了异常则执行except语句,先和except后指定的异常类型进行匹配,匹配成功捕获到异常输出对应的代码块。匹配失败则不能捕获    2、多异常捕获        通常在代码中可能一段代码出现多种异常,这样我们则可以使用多异常捕获来进行        1)、多个except语句        类似于if-else语句会一个一个进行判断,如果匹配成功则执行对应的except中的语句,直到最后。try:num1=int(input('请输入整数:'))num2=int(input('请输入整数:'))print("num1/num2=",num1/num2)exceptValueErrorase:#检测是否有类型错误如果有则执行except里面的语句#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print('输入的不是整型')exceptZeroDivisionErrorase:#捕获除数为零的异常print('除数不能为零')        2)、 使用元组同时匹配多个异常try:num1=int(input('请输入整数:'))num2=int(input('请输入整数:'))print("num1/num2=",num1/num2)except(ValueError,ZeroDivisionError)ase:#检测是否出现元组中的错误如果有则执行except里面的语句#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print('出现异常:',e)    3、万能异常Exception     可以用于匹配大多数异常,如果是语法错误则捕获不到。try:num1=int(input('请输入整数:'))num2=int(input('请输入整数:'))print("num1/num2=",num1/num2)exceptExceptionase:#用于捕获大多数逻辑错误所引发的异常print('出现异常:',e)'运行运行         如以下输入于结果: 三、进阶异常处理try:print("被检测的语句")except检测报错类型ase:#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print(e)else:print('没有捕获到异常执行')finally:#主要用于资源回收的作用,如在对文件进行操作时,不管有没有报错都对文件进行关闭的操作print('一定会执行的语句')'运行运行例代码:try:num1=int(input('请输入整数1:'))num2=int(input('请输入整数2:'))print('num1/num2=',num1/num2)exceptExceptionase:#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print(e)else:print('没有捕获到异常执行')finally:print('一定会执行的语句')'运行运行 运行结果:没有异常的结果:捕获到异常的结果:四、raise抛出异常    不符合python语法的由python解释器主动抛出异常    而raise则是由程序员,自定义规则来抛出异常    语法:#1、使用Exception创建异常对象e=Exception('自定义异常')#2、使用raise抛出异常raisee    运行结果:触发报错,报错信息为,自己创建的异常对象内容    但是抛出异常并不是为了让代码崩溃,而是为了拦截代码不符合预期的走向,所以常常于异常捕获一起使用,如:deffunc():num=input('请输入6-10位密码:')if6>len(num)orlen(num)>10:raiseException('密码位数错误')print('密码正确')try:func()exceptExceptionase:print('触发异常',e)'运行运行运行结果:  拓展    在python中for于while后面也是可以接else语句的。当else语句和循环链接,如果循环没有被break终止则会输出else里面的内容,否则不输出。没有被break终止代码:foriinrange(10):print(i,end='\t')else:print('\n循环已到最后')'运行运行 运行结果:被break终止:foriinrange(10):ifi==4:breakprint(i,end='\t')else:print('\n循环已到最后')'运行运行 运行结果:  总结    一个程序中出现报错,对于用户的体验是非常不好的,如果多使用异常处理则可以有效的避免这种情况,提高程序的容错性与可靠性。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-11 06:11 , Processed in 0.434100 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表