python10(异常)

try…一个except 结构

结构如下:

try:
	被监控的可能引发异常的语句块
except	BaseException[as  e]:
	异常处理的语句块

try 块包含着可能引发异常的代码,except块则用来捕捉和处理发生的异常。执行的时候,如果 try块中没有引发异常,则跳过ecept块继续执行后续代码;执行的时候,如果try块中发生了异常,则跳过try块中的后续代码,跳到相应的except块中处理异常;异常处理完后,继续执行后续代码。

print("step0")
try:
    print("step1")
    a=3/0#从这里开始跳过
    print("step2")
except BaseException as e:
    print("step3")
    print(e)
print("end!!!!")

在这里插入图片描述
测试:

#coding=utf-8
#循环输入数字,如果不是数字则处理异常,直到输入88,则结束循环

while True:
    try:
        x=int(input("请输入一个数字"))
        print("输入的数字:",x)
        if x==88:
            print("退出程序")
            break
    except BaseException as e:
        print(e)
        print("异常,输入的不是一个数字")

print("循环数字输入程序结束!")

在这里插入图片描述

try…多个except 结构

子类在前
结构如下:

try:
	被监控的,可能引发异常的语句块
except Exception1:#子类在前
	处理Exception1的语句块
except Exception2:
	处理Exception2的语句块
...
exception BaseException:
	处理可能遗漏的异常的语句块
try:
    a=input("请输入一个被除数:")
    b=input("请输入一个除数:")
    c=float(a)/float(b)
    print(c)
except ZeroDivisionError:
    print("异常,不能除以6")
except ValueError:
    print("异常,不能将字符串转化成数字")
except NameError:
    print("异常,变量不存在")
except BaseException as e:
    print(e)

在这里插入图片描述

try…except…else结构

try…except…else结构增加了”else块",如果try中没有抛出异常,则执行else块。如果try块中抛出异常,则执行except块,不执行else

try:
    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c = float(a) / float(b)
except BaseException as e:
    print(e)
else:
    print(c)
print("程序结束!")

在这里插入图片描述
在这里插入图片描述

try…except…finally结构

try…except…finally结构,finally无论是否发生异常都会被执行:通常用来释放try块中申请的资源。
在这里插入图片描述

try:
    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c = float(a) / float(b)
except BaseException as e:
    print(e)
else:
    print(c)
finally:
    print("finally语句,无论异常与否,都要执行")
print("程序结束!")

在这里插入图片描述

常见异常解决

return语句和异常处理问题

由于return有两种作用:结束方法运行、返回值。我们一般不把return放到异常处理结构中,而是放到方法最后。

常见异常的解决

  1. SyntaxError 语法错误
  2. NameError 尝试访问一个没有申明的变量
  3. ZeroDivisionError 除数为0错误
  4. ValueError 数值错误
  5. TypeError 类型错误
  6. AttributeError 访问对象不存在的属性
  7. IndexError 索引越界异常
  8. KeyError 字典的关键字不存在
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

with上下文管理

finally块由于是否发生异常都会执行,通常我们放释放资源的代码。其实,我们可以通过with 上下文管理,更方便的实现释放资源的操作。|
语法结构:

with context_expr[as var]:
	语句块

with 上下文管理可以自动管理资源,在with 代码块执行完毕后自动还原进入该代码之前的现场或上下文。不论何种原因跳出 with 块,不论是否有异常,总能保证资源正常释放。极大的简化了工作,在文件操作!网络通信相关的场合非常常用。

trackback模块

使用trackback模块打印异常信息

import traceback

try:
    print("step1")
    num=2/0
except:
    traceback.print_exc()

#######0####将异常信息输出到指定文件#################
try:
    print("step1")
    num=2/0
except:
    with open("d:/a.txt","a") as f:
        traceback.print_exc(file=f)

在这里插入图片描述
在这里插入图片描述

自定义异常类

程序开发中,有时候我们也需要自己定义异常类。自定义异常类一般都是运行时异常,通常继承Exception或其子类即可。命名一般以Error、Exception为后缀。

自定义异常由raise 语句主动抛出。

class AgeError(Exception):#继承Exception
    def __init__(self,errorInfo):
        Exception.__init__(self)
        self.errorInfo=errorInfo
    def __str__(self):
        return "年龄错误"

###########测试代码###############
if __name__=="__main__":#如果是True,则模块是作为独立文件运行,可以执行测试代码
    age=int(input("输入一个年龄"))
    if age<1  or age>150:
        raise AgeError(age)
    else:
        print("正常的年龄:",age)

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值