Python-异常错误

Python-异常错误

异常:逻辑和语法正常,程序运行时出现的未知错误,可以修复

常见的系统异常

# 除零异常
# 1/0
# ZeroDivisionError: division by zero


# 名称异常
# print(name)
# NameError: name 'name' is not defined



# 类型异常
# "1"+2
# TypeError: can only concatenate str (not "int") to str



# 索引异常
# l=[1, 2]
# l[3]
# IndexError: list index out of range



# 键异常
# dic = {"name":"sz", "age":18}
# dic["add"]
# KeyError: 'add'



# 属性异常
# name = "sz"
# print(name.xx)
# AttributeError: 'str' object has no attribute 'xx'


# 迭代器异常
# it = iter([1,2])
# print(next(it))
# print(next(it))
# print(next(it))
# # StopIteration
# # 1
# # 2

# 系统异常继承树
#   baseException所有内建的异常的基类
#       SystemExit  由sys.exit()函数引发,当它不处理时,Python解释器退出
#       KeyboardInterrupt   当用户点击中断键(通常ctrl + C)时引发
#       GeneratorExit   当调用一种generateor的close()方法时引发
#       Exception   所有内置的、非系统退出异常是从该类派生出的,应该从该类派生出所有用户定义的异常

如何解决异常

系统一开始已经内置了一些特定的应用场景,当我们写代码的过程种,一旦触发了这个场景,系统内部就会自动的向外界抛出这个问题,即异常。程序被终止,软件崩溃。

预防

添加容错代码

弊端:容错代码不是主要业务逻辑,过多的话会造成代码混乱,主业务不清晰

解决

捕获处理异常

在这里插入图片描述

# -------------方案1---------------------
# try:
#     1 / 0
#     print(name)
# except ZeroDivisionError as ze:
#     print("xxx", ze)
# except NameError as ne:
#     print("名称错误", ne)
# else:
#     print("123")
# finally:
#     print("最后执行的内容,不管是否出现异常,都会执行")

# 可以合并错误
# try:
#     1 / 0
#     print(name)
# except (ZeroDivisionError, NameError) as e:
#     print("xxx", e)
# else:
#     print("123")
# finally:
#     print("最后执行的内容,不管是否出现异常,都会执行")
# # xxx division by zero

# 不知道什么错误直接except Exception

如何手动抛出异常?

通过raise语句直接向外界抛出异常

def set_age(age):
    if age <=0 or age>200:
        raise ValueError("值错误")
    else:
        print("设置年龄为",age)

try:
    set_age(-18)
except ValueError as e:
    print("x", e)
class LessZero(Exception):
    def __init__(self, msg, error_code):
        self.msg = msg
        self.ec = error_code

    def __str__(self):
        return self.msg + str(self.ec)

def set_age(age):
    if age <=0 or age>200:
        raise LessZero("小于零,错误",404)
    else:
        print("设置年龄为",age)

try:
    set_age(-18)
except LessZero as e:
    print("x", e)
    
# x 小于零,错误404
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值