zoukankan      html  css  js  c++  java
  • python基础(八)----异常

    一、异常种类

    #异常:Python解释器在执行程序时,如果遇到一个错误,就称为一个异常
    #抛出异常: 程序执行中止报错,称为抛出异常

    #捕获异常:某些代码不能确认是否正常执行,可以来捕获异常

    异常的种类:
    Exception 所有异常的基类,包含所有错误类型
    AttributeError 对象没有这个属性
    IOError 输入/输出异常;基本上是无法打开文件
    ImportError 无法引入模块或包;基本上是路径问题或名称错误
    IndentationError 语法错误(的子类);缩进错误,代码没有正确对齐
    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError 对类型无效的操作
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的
    NotImplementedError 尚未实现的方法
    StopIteration 迭代器没有更多的值
    """

    二、异常捕获结构

    """
    1.简单异常捕获
    try:
    尝试执行的可能存在异常的代码
    except:
    异常处理,如果发生异常,执行except的代码,except可以有0个或多个,如果有多个
    """
    "比如在计算除法中出现为 0 的情况出现异常 "
    try:
    1/0
    except ZeroDivisionError as e:
    print(e.args)

    """
    2.根据错误类型捕获异常
    try:
    尝试执行可能存在异常的代码
    except 已知异常1:
    异常处理

    except(已知异常2,已知异常3):
    异常处理
    """

    """
    3.python内置模块.捕获未知错误
    开发时没有提前预知的错误被称为未知错误
    如果开发过程中,不论出现任何异常而导致程序终止,则可以使用捕获未知错误
    语法:
    try:
    尝试执行可能存在异常的代码
    except Exception as result: #Exception是python的异常类,包含所有的错误类型;result表示错误类型,使用print可以输出错误信息
    print("出现的异常是%s" %result)
    """

    """
    4.异常捕获的完整语法:
    try:
    尝试可能有异常的代码段
    except 已知异常1:
    异常处理
    except (已知异常2,已知异常3):
    异常处理
    except Exception as result: #捕获未知异常
    print("未知异常%s" %result)
    else:
    无异常时执行的代码段
    finally:
    无论是否有异常都会执行的代码段
    """

    """
    6.主动抛出异常
    除了程序中本来需要捕获的异常外,还可以根据应用需求主动抛出异常
    python提供了 Exception 异常类,如果想主动抛出异常:
    1.创建一个Exception类的异常对象:EX= Exception()
    2.使用raise 抛出异常对象: raise Ex
    """
    "主动抛出异常的例子"
    def input_passworld():
    userpwd= int(input("请输入一个密码:"))
    if len(userpwd>=8 ): #如果密码大于等于8,返回密码
    return userpwd
    # 如果小于8,则抛出异常
    EX= Exception("密码长度不够!!!") # 1.创建异常对象
    raise EX # 2.抛出异常对象

    try:
    print(input_passworld()) # 在调用函数方捕获抛出的异常
    except Exception as result:
    print("异常信息%s" %result)

    """
    7.异常的传递
    异常向上传递,会一级一级传递到调用函数,直到主程序
    * * * 在主程序中设置异常捕获机制,可以防止程序出错终止
    """
    def demo1():
    func1= input( input("请输入正确的整数"))
    print("func1")
    def demo2():
    demo1()

    # 主程序:
    try:
    print(demo2()) #在主程序中设置异常捕获机制,可以防止程序出错终止
    except Exception as result:
    print("捕获到的异常为%s" %result)

    三、自定义异常

    1. 定义一个异常类,继承Exception基类
    2. 使用raise抛出异常类
    """
    class MyException(Exception): #定义一个异常,继承 Exception异常基类
    def __init__(self, msg):
    self.message = msg
    def __str__(self):
    return self.message

    try:
    raise MyException('我的异常') #使用 raise 主动触发异常
    except MyException as e:
    print('异常信息:', e)

    四、断言

    什么是断言?
    在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时 就崩溃,这时候就需要 assert 断言的帮助
    python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。
    可以理解 assert 断言语句为 raise-if-not,用来测试表示式,其返回值为假,就会触发异常。
    断言条件为真时,代码继续执行,负责抛出异常,这个异常通常不会去捕获他,我们设置一个断言目的就
    是要求必须实现某个条件。assert True

    格式: assert 表达式 #表达式为真,断言成功,不输出任何消息,程序继续执行;表达式为假,断言失败,程序报错终止

    断言的应用场景:

    1.断言能够帮助别人或未来的你理解代码,找出程序中逻辑不对的地方,
    2.一方面,断言会醒你某个对象应该处于何种状态,
    3.python内置模块.另一方面,如果某个时候断言为假,会抛出 AssertionError 异常,很有可能终止程序。
    4.来测试表示式,其返回值为假,就会触发异常
    """
    assert 1 == 1 #表达式为真,不输出信息
    print('---------------')
    #assert 1 == 2 #表达式为假,抛出异常
    """Traceback (most recent call last):
    # File "Z:/python_project/day18/ddd/yichang.py", line 26, in <module>
    # assert 1 == 2
    #AssertionError"""

    def foo(a):
    assert a==2,Exception("不等于 2")
    print("ok",a)
    if __name__ == '__main__':
    foo(2) #ok 2
    foo(1) #AssertionError: 不等于 2



  • 相关阅读:
    Chrome 中的彩蛋,一款小游戏,你知道吗?
    Json对象与Json字符串互转(4种转换方式)
    [PHP自动化-进阶]005.Snoopy采集框架介绍
    [PHP自动化-进阶]004.Snoopy VS CURL 模拟Discuz.net登陆
    [PHP自动化-进阶]003.CURL处理Https请求访问
    [PHP自动化-进阶]002.CURL模拟登录带有验证码的网站
    [PHP自动化-进阶]001.CURL模拟登录并采集数据
    [注]2015中国程序员生存报告,你苦你先看@^@
    [JavaWeb基础] 016.Struts2 国际化配置
    [工具推荐]_iOS音频批量转换
  • 原文地址:https://www.cnblogs.com/ychelloworld/p/14644483.html
Copyright © 2011-2022 走看看