python总结高阶-异常处理机制

文章目录

    • 异常是什么?
    • try和except结构
      • try...一个except结构
      • try...多个except结构
      • try...except...else结构
      • try...except...finally结构
      • return语句和异常处理问题
    • 常见异常
      • 常见异常的解决
        • SyntaxError :语法错误
        • NameError :尝试访问一个没有申明的变量
        • ZeroDivisionError :除数为0错误(零除错误)
    • 自定义异常类

异常是什么?

python总结高阶-异常处理机制_第1张图片
工作中,程序遇到的情况不可能完美。比如:程序要打开某个
文件,这个文件可能不存在或者文件格式不对;程序在运行
着,但是内存或硬盘可能满了等等。

软件程序在运行过程中,非常可能遇到刚刚提到的这些问题,我们

称之为异常,英文是: Exception ,意思是例外。遇到这些例外情况,
或者叫异常,我们怎么让写的程序做出合理的处理,安全的退出,
而不至于程序崩溃呢?我们本章就要讲解这些问题。

try和except结构

try…一个except结构
try…except 是最常见的异常处理结构。结构如下:

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

try…一个except结构

python总结高阶-异常处理机制_第2张图片

try…多个except结构

 try:
    a = input("请输入被除数:")
    b = input("请输入除数:")
    c = float(a)/float(b)
    print(c)

 except ZeroDivisionError:
    print("异常:除数不能为0")
 except TypeError:
    print("异常:除数和被除数都应该为数值类型")
 except BaseException as e:
    print(e)
    print(type(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)

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
放到异常处理结构中,而是放到方法最后。

常见异常

python总结高阶-异常处理机制_第3张图片

常见异常的解决

Python中的异常都派生自 BaseException 类

SyntaxError :语法错误
    int a =3
        ^	
SyntaxError: invalid syntax
NameError :尝试访问一个没有申明的变量
    print(a)
NameError: name 'a' is not defined
ZeroDivisionError :除数为0错误(零除错误)
    a = 3/0
ZeroDivisionError: division by zero

ValueError :数值错误
TypeError :类型错误
AttributeError :访问对象的不存在的属性
IndexError :索引越界异常
KeyError :字典的关键字不存在

自定义异常类

#测试自定义异常类

 class AgeError(Exception):  #继承Exception
    def __init__(self,errorInfo):
        Exception.__init__(self)
        self.errorInfo = errorInfo
    def __str__(self):
        return str(self.errorInfo)+",年龄错误!应该在1-150之间"


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

你可能感兴趣的:(Python,python,开发语言)