异常处理

Posted xiamenghan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理相关的知识,希望对你有一定的参考价值。

异常是错误发生前的一种信号,如果没有人来处理这个信号,就会中断执行并且抛出错误信息。

异常分为语法检查异常和运行时异常:

语法检查异常是最低级的异常 在编译器里自动提示 在文本编辑器时当你运行代码解释器就会检查语法    绝对不能犯语法检查异常的错误

运行时异常是我们处理的重点,通常在代码运行时才会被发现,在运行时发生异常并且没有正确处理,就会抛出错误信息 并中断程序执行

我们学习异常处理是为了让我们的程序更加稳定,保证健壮性

常见的异常:
NameError 找不到这个名字 变量或者函数 ValueError 在调用一个函数时给的值不正确 TypeError 类型错误 ZeroDivisionError 除数不能为0 KeyError 没有这个key IndexError 索引不存在 StopIteration 没有更多的值可以迭代 FileNotFoundError 文件不存在 io.UnsupportedOperation 文件的操作不支持 AttributeError 没有这个属性 KeyboardInterrupt 程序被强行终止
异常处理写法:
多异常类型处理
try:
    name
    [][1]
    1/0
except NameError:
    print(name)
except IndexError:
    print(list)
except ZeroDivisionError:
    print(zero)

===>
name 

强调:一旦try 中有代码抛出了异常 后面的代码全都不执行


多异常类型处理2
try:
    name
    [][1]
    1/0
except (NameError,IndexError,ZeroDivisionError):
    print(name,list,zero)

万能异常类型 Exception 或者 BaseException  基于面向对象的继承与多态

try:
    name
    [][1]
    1/0
except Exception:
    print(name,list,zero)

不常用的语法

 

try:
    name

except Exception:
    print(name)
else:
    print(代码正确)#try中没有发生异常时运行
finally:
    print(===>)#不管有没有发生异常都会运行

 

在下面的代码必须依赖上面代码的正确数据时可以使用断言

name = xia
assert name == egon‘ #代码错误时可以抛出一个AssertionError 来表表示断言失败
print(name)

 

自定义异常类型

技术分享图片
主动抛出异常:
Class =input(请输入班级名)
if Class == python:
    print(yes)
else:
    raise ValueError(你输入的班级名不对)

自定义异常:
class CusError(BaseException):
    def __init__(self,name):
        self.name =name

def func():
    ls = input(y/n:)
    if ls == y:
        print(正确)
    else:
        raise CusError(xia)# 主动抛出异常
try:
    func()
except CusError as e:#使用e来获取异常对象
    print(e.name)
例子

 

 




以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章

使用片段中的处理程序时出现非法状态异常

Java异常处理机制

java 反射代码片段

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

片段中的Android致命异常