python学习异常处理/day11晚上复习

怎样能让程序发生异常时,不让程序停止,能正常运行呢?如下效果,就需要捕获异常。
while True:
    try:
        ret=eval(input("输入公式"))
        print(ret)
    except ZeroDivisionError as e:
        print("除数为0了")

try:
    print("开始")
    print(1/0)
    print("结尾")
except ZeroDivisionError as e:
    print("try中代码出错你就看到我了")

异常类型和捕获的异常类型不相同,是不能捕获异常的
try:
    print("开始")
    print(1/0)
    print("结束")
except IndexError as e:
    print("你不会看到这句话,因为异常类型和捕获的异常类型不相同,不能捕获异常")

多分支结构
try:
    print("开始")
    lst=[12,3]
    print(lst[3])
    print(2/0)
    print("结束")
except ZeroDivisionError:
    print("除数为0")
except IndexError:
    print("索引越界")
"""
结果为:
开始
索引越界         #能捕捉多种异常类型,但是只报第一次出现的异常,再往下就不会再执行了
"""

元组结构
try:
    a=[1]
    print(2/0)
    print(a[2])
except (ZeroDivisionError,IndexError) as e:
    print(e)              #division by zero

else格式:没有出现异常的话执行else
try:
    print("哈哈")
    print(1/0)
except:
    print("出现异常了")
else:
    print("没有出现异常")

try...finally格式,不管try中是否抛出异常,最终都会执行finally中的代码。
try:
    a=[1,2]
    print(1/0)
    print(a[3])
except:
    print("出错执行这里")
finally:
    print("有没有错误都会执行这里")

抛出系统异常
while True:
    try:
        name=input("请输入姓名(不能少于三位):")
        if len(name)<3:
            raise Exception("姓名太少,请重新输入")
        else:
            pwd=input("请输入密码:")
        print(name,pwd)
    except Exception as e:
        print(e)

抛出自定义异常
class ShortInputError(Exception):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg
try:
    raise ShortInputError("异常消息")
except ShortInputError as e:
    print(e)

练习:判断输入字符串的长度,如果小于指定的长度就报错
class MyException(Exception):
    def __init__(self,length,atlength):
        self.length=length
        self.atlength=atlength
    def __str__(self):
        return "输入的长度是{},长度至少为{}".format(len(self.length),self.atlength)
msg=input("请输入的长度大于5:")
try:
    if len(msg)<5:
        raise MyException(msg,5)
except MyException as e:
    print(e)

 

猜你喜欢

转载自blog.csdn.net/qq_39112101/article/details/88140044