Python异常处理

2019-06-05  本文已影响0人  郭_扬

本节课纲:

一、异常的概念

程序开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的 稳定性和健壮性

一段代码:

num = int(input("请输入数字:"))
print('hello')

如果我们输入非数字,输出:

请输入数字:s
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/untitled16/ex.py", line 6, in <module>
    num = int(input("请输入数字:"))
ValueError: invalid literal for int() with base 10: 's'

1.发生错误 2.程序终止---hello没有输出

二、捕获异常

2.1 简单的捕获异常语法

try:
    尝试执行的代码
except:
    出现错误的处理
try:
    # 提示用户输入一个数字
    num = int(input("请输入数字:"))
except:
    print("请输入正确的数字")

print('hello')

输入非数字:

请输入数字:r
请输入正确的数字
hello

程序没有终止,输出了hello
2.2 错误类型捕获

try:
    # 尝试执行的代码
    pass
except 错误类型1:
    # 针对错误类型1,对应的代码处理
    pass
except (错误类型2, 错误类型3):
    # 针对错误类型2 和 3,对应的代码处理
    pass
except Exception as result:
    print("未知错误 %s" % result)
try:
    num = int(input("请输入整数:"))
    result = 8 / num
    print(result)
except ValueError:
    print("请输入正确的整数")
except ZeroDivisionError:
    print("除 0 错误")

捕获未知错误

语法如下:

except Exception as result:
    print("未知错误 %s" % result)

2.3 异常捕获完整语

提示:
1)有关完整语法的应用场景,在后续学习中,结合实际的案例会更好理解
2)现在先对这个语法结构有个印象即可

try:
    # 尝试执行的代码
    pass
except 错误类型1:
    # 针对错误类型1,对应的代码处理
    pass
except 错误类型2:
    # 针对错误类型2,对应的代码处理
    pass
except (错误类型3, 错误类型4):
    # 针对错误类型3 和 4,对应的代码处理
    pass
except Exception as result:
    # 打印错误信息
    print(result)
else:
    # 没有异常才会执行的代码
    pass
finally:
    # 无论是否有异常,都会执行的代码
    print("无论是否有异常,都会执行的代码")
try:
    num = int(input("请输入整数:"))
    result = 8 / num
    print(result)
except ValueError:
    print("请输入正确的整数")
except ZeroDivisionError:
    print("除 0 错误")
except Exception as result:
    print("未知错误 %s" % result)
else:
    print("正常执行")
finally:
    print("执行完成,但是不保证正确")
三、异常的传递

提示

需求

1.定义函数 demo1() 提示用户输入一个整数并且返回
2.定义函数 demo2() 调用 demo1()
3.在主程序中调用 demo2()

def demo1():
    return int(input("请输入一个整数:"))

def demo2():
    return demo1()

try:
    print(demo2())
except ValueError:
    print("请输入正确的整数")
except Exception as result:
    print("未知错误 %s" % result)
四、抛出raise异常

4.1 应用场景

示例

4.2 抛出异常

需求

def input_password():

    # 1\. 提示用户输入密码
    pwd = input("请输入密码:")

    # 2\. 判断密码长度,如果长度 >= 8,返回用户输入的密码
    if len(pwd) >= 8:
        return pwd

    # 3\. 密码长度不够,需要抛出异常
    # 1> 创建异常对象 - 使用异常的错误信息字符串作为参数
    ex = Exception("密码长度不够")

    # 2> 抛出异常对象
    raise ex

try:
    user_pwd = input_password()
    print(user_pwd)
except Exception as result:
    print("发现错误:%s" % result)
五、自定义异常

自定义异常主要是自己定义的异常类,对异常进行分门别类管理,自定义异常需要继承异常父类Exception 一个例子

class MyException(Exception):                   #让MyException类继承Exception
    def __init__(self,name,age):
        self.name = name
        self.age = age
try:
    #知识点:主动抛出异常,就是实例化一个异常类
    raise MyException("zhansgan",19)            #实例化一个异常,实例化的时候需要传参数
except MyException as obj:                      #这里体现一个封装,
    print(obj.age,obj.name)                     #捕获的就是MyException类携带过来的信息

except Exception as obj:                        #万能捕获,之前的可能捕获不到,这里添加Exception作为保底
    print(obj)

上一篇 下一篇

猜你喜欢

热点阅读