1.异常概述

1.什么是错误: 错误是指有逻辑或语法等导致一个程序无法正常执行的问题
    2.什么是异常: 异常时程序出错时标识的一种状态,程序不会向下执行而转去调用此函数的地方等待处理错误并恢复为正常状态

    3.异常的作用: 通知上层调用者有错误产生需要处理,用做信号

    4.为什么要有异常处理机制: 在程序调用层数较深时,向主调函数传递错误信息需要层层的返回比较麻烦,所以用异常处理机制

2.异常处理语法

try-except语法: 尝试捕获异常,将程序转为正常状态并继续执行

        try:

            可能触发异常的语句

        except 错误类型1 as 变量1:

            异常处理语句1

        except 错误类型2 as 变量2:

            异常处理语句2

        else:

            未发生异常时会执行的语句

        finally:

            无论有无异常都会执行的语句

    try-finally语法: finally子句不能省略且不存在except子句,不会改变程序的(正常/异常)状态

        try:

            可能触发异常的语句

        finally:

            无论有无异常都会执行的语句

3.完整的异常语法示例

try:

        # 提示用户输入一个整数

        num = int(input("请输入一个整数:"))

        # 使用8除以用户输入的整数并且输出

        print("8除以%d的结果是:%.2f" % (num, 8/num))

    except ZeroDivisionError:

        print("除0错误")

    except ValueError:

        print("请输入正确的正整数")

    except Exception as e:

        print("未知错误:%s" % e)

    else:

        print("尝试成功")

    finally:

        print("无论有无异常发生必须执行此句")

4.主动抛出异常语句raise

作用: 触发一个错误让程序进入异常状态

    语法:

        raise 异常类型

        或 raise 异常对象

    示例:

        # 主动抛出异常

        def input_password():

            # 提示用户输入密码

            pwd = input("请输入密码:")

            # 判断密码长度>=8,返回用户输入的密码

            if len(pwd) >= 8:

                return pwd

            # 如果<8主动抛出异常

            print("主动抛出异常")

            # 创建一个异常对象(可以使用错误字符串信息作为参数)

            ex = Exception("密码长度不够")

            # raise主动抛出异常

            raise ex

try:

            print(input_password())

        except Exception as e:

            print(e)

5.异常的传递特性

def fun1():

        return int(input("请输入整数: "))

def fun2():

        return fun1()

# 利用异常传递性在主程序捕获异常

    try:

        print(fun2())

    except Exception as e:

        print("未知错误: %s" % e)

6.自定义异常

class MsgException(BaseException):

        def __init__(self, msg):

            self.msg = msg

try:

        raise MsgException("消息类型错误")

    except MsgException as e:

        print(e)

7.断言语句assert

作用: 当真值表达式为False时用错误数据创建一个AssertionError类型的错误并进入异常状态

    语法

        assert 真值表达式

    等同于

        if 真值表达式 == False:

            raise AssertionError(错误数据)

    示例1:

        # assert断言会终止程序并抛出异常

        def test1():

            print("模拟大量逻辑处理")

            ret = 100

            return ret

ret = test1()

        assert ret == 1000, "ret变量未使用到"

        ret1 = ret + 100

        print(ret1)

        # 执行结果: AssertionError: ret变量未使用到

    示例2:

        def get_age():

            age = input("请输入年龄: ")

            age = int(age)

            assert age < 140, "年龄不能大于140岁!"

            assert age >= 0, "年龄不能为负数!"

            return age

try:

            age = get_age()

        except AssertionError as err:

            print("发生了断言错误,错误对象是: %s" % err)

            age = 0

        print("您输入的年龄是: %s" % age)

8.异常处理的高级用法-环境管理器(上下文管理器)

with语句实现上下文管理器概述:

        1.用于对资源访问的场合,确保使用过程中不管是否发生异常,都会执行必要有"清理"操作,并释放资源

        2.with语句与try-finally相似,并不会改变异常状态,常运用于文件打开后自动关闭,线程中锁的自动获取和释放

        2.语法: with 表达式1 [as 变量名1], 表达式2 [as 变量名2], ...  # as 子句用于绑定表达式创建的对象

    示例:

        # 打开文件读取文件数据(with来实现关闭文件)

        def read_file():

            try:

                # f = open("abcd.txt")

                with open('abcd.txt') as f:

                    while True:

                    s = f.readline()

                    if not s:

                        break

                    int(input("请输入任意数字打印下一行: "))

                    print(s)

                    print("文件已经关闭")

except IOError:

                print("出现异常已经捕获!")

            except ValueError:

                print("程序已转为正常状态")

read_file()

        print("程序结束")

9.环境管理器(上下文管理器)原理剖析

1.内部有__enter__ 和 __exit__方法的类被称为环境管理器,能够用with进行管理的对象必须是环境管理器

    2.__enter__ 将在进入with语句时被调用,并返回由as变量管理的对象

    3.__exit__ 将在离开with语句时被调用,且可以用参数来判断离开with语句时是否出现异常并做出相应的处理

class FileWriter:
def __init__(self, filename):
self.filename = filename # 此属性用于记住文件名 def writeline(self, s):
'''此方法用于向文件内写入字符串,同时自动添加换行'''
self.file.write(s)
self.file.write('\n') def __enter__(self):
'''此方法用于实现环境管理器'''
self.file = open(self.filename, 'w')
print("已进入__enter__方法,文件打开成功")
return self # 返回值向用于 with中的as 绑定 def __exit__(self, exec_type, exec_value, exec_tb):
'''
exec_type: 为异常类异,没有异常发生时为None
exec_value: 为错误的对象,没有异常时为None
exec_tb: 为错误的traceback对象
'''
self.file.close()
print("文件", self.filename, "已经关闭")
if exec_type is None:
print("退出with时没有发生异常")
else:
print("退出with时,有异常,类型是", exec_type, "错误是", exec_value)
print("__exit__法被调用,已离开with语句") try:
with FileWriter("log.txt") as fw:
while True:
s = input("请输入一行: ")
if s == "exit":
break
if s == "error":
raise ValueError("故意制造的值错误")
fw.writeline(s)
except:
print("有错误发生,已转为正常") print("这是with语句之外,也是程序的最后一条语句")

自定义的类实现环境管理器示例:

10.全部的异常类型

错误类型

ZeroDivisionError 除(或取模)零 (所有数据类型)
ValueError 传入无效的参数
AssertionError 断言语句失败
StopIteration 迭代器没有更多的值
IndexError 序列中没有此索引(index)
IndentationError 缩进错误
IOError 输入/输出操作失败
ImportError 导入模块/对象失败
NameError 未声明/初始化对象 (没有属性)
AttributeError 对象没有这个属性
 BaseException  所有异常的基类
 SystemExit  解释器请求退出
 KeyboardInterrupt  用户中断执行(通常是输入^C)
 Exception  常规错误的基类
 GeneratorExit  生成器(generator)发生异常来通知退出
 StandardError  所有的内建标准异常的基类
 ArithmeticError  所有数值计算错误的基类
 FloatingPointError  浮点计算错误
 OverflowError  数值运算超出最大限制
 EOFError  没有内建输入,到达EOF 标记
 EnvironmentError  操作系统错误的基类
 OSError  操作系统错误
 WindowsError  系统调用失败
 LookupError  无效数据查询的基类
 KeyError  映射中没有这个键
 MemoryError  内存溢出错误(对于Python 解释器不是致命的)
 UnboundLocalError  访问未初始化的本地变量
 ReferenceError   弱引用(Weak reference)试图访问已经垃圾回收了的对象  
 RuntimeError  一般的运行时错误
 NotImplementedError  尚未实现的方法
 SyntaxError  Python  语法错误
 TabError  Tab 和空格混用
 SystemError  一般的解释器系统错误
 TypeError  对类型无效的操作
 UnicodeError  Unicode 相关的错误
 UnicodeDecodeError  Unicode 解码时的错误
 UnicodeEncodeError  Unicode 编码时错误
  UnicodeTranslateError    Unicode 转换时错误

警告类型

Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
  PendingDeprecationWarning   关于特性将会被废弃的警告
RuntimeWarning   可疑的运行时行为(runtime behavior)的警告  
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

06_Python异常处理机制的更多相关文章

  1. Java异常处理机制 try-catch-finally 剖析

    Java拥有着强大的异常处理机制,最近初步学习了下,感觉内容还是挺多的,特此来将自己的理解写出来与大家分享. 一. 在Java代码code中,由于使用Myeclipse IDE,可以自动提醒用户哪里有 ...

  2. JAVA 异常处理机制

    主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...

  3. 深入理解java异常处理机制

       异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的 ...

  4. C++学习笔记27:异常处理机制

    一.异常处理机制基础 异常的定义 程序中可以检测的运行不正常的情况 异常处理的基本流程 某段程序代码在执行操作时发生特殊情况,引发一个特定的异常 另一段程序代码捕获该异常并处理它 二.异常的引发 th ...

  5. C++中的异常处理机制

    C++中的捕获异常机制catch参数中实参的类型不同,采取的处理方式则不相同,且与普通的函数调用还不一样,具体表现为当抛出异常throw A()或throw obj时,对象会进行一次额外的对象复制操作 ...

  6. 16、java中的异常处理机制

    异常:就是程序在运行时出现不正常情况.异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述.并封装成对象. 其实就是java对不正常情况进行描述后的对象体现. 对于问题的划 ...

  7. Struts——(四)异常处理机制

    在通常的情况下,我们得到异常以后,需要将页面导航到一个错误提示的页面,提示错误信息.利用Stuts我们可以采用两种方式处理异常: 1.编程式异常处理 即我们在Action中调用业务逻辑层对象的方法时, ...

  8. Java面向对象编程之异常处理机制

    一:Java的异常处理机制的优点: 1:把各种不同情况的异常情况分类,使用JAVA类来表示异常情况,这种类被称为异常类.把各种异常情况表示成异常类,可以充分的发挥类的可扩展性和可重用性. 2:异常流程 ...

  9. Java之异常处理机制

    来源:深入理解java异常处理机制 2.Java异常    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 ...

随机推荐

  1. Setup Factory 9 打包安装程序过程中提示安装.net4.5、并启用md5加密算法

    1.在Before Installing选项卡中选择Ready to Install,点击Edit进入编辑窗口,切到最后一个选项卡Actions,把判断内容复制进去 -- These actions ...

  2. C#LeetCode刷题-双指针

    双指针篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串   24.5% 中等 11 盛最多水的容器   43.5% 中等 15 三数之和   16.1% 中等 16 最接近的三数之和   3 ...

  3. rocketMq安装及集群配置

    网上关于rocketMq安装.集群配置的文章有很多,作为一个初学者,跟着网上的各种教程安装遇到了各种坑,可谓是一路坎坷.本文记录下rocketMq安装的完整过程.希望对你有一点帮助 安装rocketM ...

  4. 针对VM从挂机-启动后,docker相关服务的无法使用问题!

    使用软件 :VMware  WorkStation 使用系统:linux  centOS 7 windows远程调用软件:xshell 挂机-启动状态后 先使用  service network re ...

  5. Vulnhub篇Photographerr

    0x00 靶机信息 靶机:Photographerr:1 难度:中 下载:https://www.vulnhub.com/entry/photographer-1,519/ 0x01 信息收集 靶场网 ...

  6. Nginx的Gzip功能

    什么是HTTP压缩 有时候客户端和服务器之间会传输比较大的报文数据,这时候就占用较大的网络带宽和时长.为了节省带宽,加速报文的响应速速,可以将传输的报文数据先进行压缩,然后再进行传输. HTTP支持多 ...

  7. 报错:org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.deppon.gis.module.job.server.server.impl.HaoDuanEntity'.

  8. excel如何写宏?如何用按钮?

    注:本次测试版本 excel版本2019 写宏? 准备工作(使用宏的一切前提)===========文件-选项-自定义功能区 (勾选开发工具) 开始写宏=======右击sheet1--查看代码    ...

  9. C# IObservable与IObserver观察者模式

    C#中提供了IObservable<T>接口和IObserver<T>接口来实现观察者模式,IObservable<T>相当于Subject(主题)接口,下面我们就 ...

  10. Spring注解驱动开发02(作用域和懒加载)

    Spring中bean的作用域 默认情况下,Spring只为每个在IOC容器里声明的bean创建唯一一个实例,整个IOC容器范围内都能共享该实例:所有后续的getBean()调用和bean引用都将返回 ...