Python3:异常处理


一、异常处理

# 语法错误、异常、异常捕获

# 语法问题
number = 100


def func():
    global number
    number += 1


# 异常:程序运行时爆出来的
def chu(a, b):
    return a / b


# x = chu(1, 0)  # ZeroDivisionError: division by zero
print("---------->")
# 异常处理:
"""
    try:
        可能出现异常的代码
    except:
        如果有异常的代码
    [finally:
        无论是否存在异常都会执行的代码]
        
异常捕获:
    情况一:可能出现多种异常
        try:
        可能出现异常的代码
        except 异常的类型1:
            如果有异常的代码         
        except 异常的类型2:
            如果有异常的代码  
    情况二:获取Exception报错的原因 
        try:
        可能出现异常的代码
        except 异常的类型1:
            如果有异常的代码         
        except 异常的类型2:
            如果有异常的代码  
        except Exception as err:
            print(err)---->err内容就是错误原因    
     情况三:else和return只能用一种
        try:
            可能出现异常的代码
        except 异常的类型1:
            如果有异常的代码         
        except 异常的类型2:
            如果有异常的代码  
        except Exception as err:
            print(err)---->err内容就是错误原因    
        else:
            print("没有异常时候执行")
        或者:
        try:
            可能出现异常的代码
        except 异常的类型1:
            如果有异常的代码         
        except 异常的类型2:
            如果有异常的代码  
        except Exception as err:
            print(err)---->err内容就是错误原因  
            return "异常中直接返回终止处理"   
     情况四:finally,不管报不报异常都会处理
        # 文件操作(释放资源) stream = open() stream.read() stream.close()
        # 数据库操作:close()
        try:
            可能出现异常的代码
        except:
            如果有异常的代码
        finally:
            无论是否存在异常都会执行的代码       
          
异常多种情况匹配顺序原则:
    是从上往下,因此exception需要放到最后执行
    else 和return 只能用一种
"""


def add():
    try:
        a = int(input("输入第一个数字:"))  # ValueError: invalid literal for int() with base 10: 'a'
        b = int(input("输入第二个数字:"))
        operator = input("输入运算符号:(+、—、*、/):")
        result = 0
        if operator == "+":
            # + 加法
            result = a + b
            print("和:", result)
        elif operator == "-":
            result = a - b
            print("减:", result)
        elif operator == "*":
            result = a * b
            print("乘:", result)
        elif operator == "/":
            result = a / b
            print("除:", result)
        else:
            print("符号输出有误!")
        # 列表操作:模拟异常
        # lst = []
        # lst.pop()
        # 放到文档:模拟异常
        # with open("result-1.txt", 'r') as w_stream: # [Errno 2] No such file or directory: 'result-1.txt'
        #     print(w_stream.read())
        with open("result.txt", 'a', encoding="utf8") as w_stream:
            w_stream.write("本次运算的结果:{}".format(result))

    except ZeroDivisionError:
        print("除数不能为零!")
    except ValueError:
        print("参数必须是数字!")
    except Exception as err:
        print("出错了!", err)
        return "出错了!"
    else:
        print("没有异常才做执行的代码块!,如果异常中有return就不添加else")


# 求和
# add()


def fun():
    """
    释放资源
    :return:
    """
    stream = None
    try:
        stream = open("result.txt", 'r', encoding="utf8")
        content = stream.read()
        print(content)
        return 1
    except Exception as err:
        print(err)
        return 2
    finally:
        if stream:
            stream.close()
        return 3  # 会覆盖掉 上面的return值(1/2)------->覆盖内存的值


# 测试finally,及时try和except 中有return,还是执行finally
y = fun()
print(y)

二、自定义异常

# 自定义抛异常

def register():
    username = input("请输入用户名:")
    if len(username) < 6:
        raise Exception("用户名小于6位,必须6位以上")
    else:
        print("输入的用户名:", username)


try:
    register()
except Exception as err:
    print(err)
    print("注册失败!")
else:
    print("注册成功!")


总结

"""
异常
语法错误
系统抛出异常
处理异常

    try:
        可能发生异常的代码
    except:
        有异常才会进入的代码
    except 异常类型 as err:
        pass
    else:
        没有异常才会进入的
    finally:
        无论有没有异常都会执行的代码
抛出异常:
    手动抛出:raise
    格式:
        raise 异常类型("提示信息")


"""

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值