zoukankan      html  css  js  c++  java
  • 异常处理

    元类中的__new__方法

      __new__方法用于新建类对象,通过type调用__new__可以用来创建一个空的对象

      __new__与__init__的区别

        作为一个类对象必须具备三个组成部分,所以调用type中的__new__来完成组装
                得到这个类对象需要返回,以供__init__来使用

    异常处理

      什么是异常处理?

        什么是异常?  与正常情况不同的就是异常,在程序执行过程中,出现错误导致代码无法执行完毕,就称之为异常

      常见异常

     1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
     2 IOError 输入/输出异常;基本上是无法打开文件
     3 ImportError 无法引入模块或包;基本上是路径问题或名称错误
     4 IndentationError 语法错误(的子类) ;代码没有正确对齐
     5 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
     6 KeyError 试图访问字典里不存在的键
     7 KeyboardInterrupt Ctrl+C被按下
     8 NameError 使用一个还未被赋予对象的变量
     9 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    10 TypeError 传入对象类型与要求的不符合
    11 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    12 导致你以为正在访问它
    13 ValueError 传入一个调用者不期望的值,即使值的类型是正确的
    常见异常

      组成异常的三部分:

        1.追踪信息 2.异常类型 3.异常的值

      如何排查错误:

        1.定位错误发生的位置

           (使用追踪信息
                                    1.代码是自己写的,没有调用任何的内置模块与方法,那么错误发生位置一定在最后一行
                                    2.如果代码调用内部模块与其他模块的方法:

               1.是系统内置的模块  例如抛出位置object.py 不用去查看object类  它几乎不可能出错一定是你自己代码在调用时出了错误
               2.别人写的模块是有可能出错的 所以 你可以按照追踪信息点击去看看
                          如果有很多追踪信息,找最后一行是自己写的代码的位置

        2.查看异常类型  例如:IndexError
             3.查看异常的值  例如: list index out of range

          如果没有任何异常信息 但是程序就是不对 可以使用排除法

      异常可以根据发生时间分为两类:
              1.语法检测异常 (语法异常和缩进错误)
                  解释器在执行代码前会检测语法,检测通过才会执行,如果这个阶段出现异常,代码一行都不会执行
              2.运行是异常
                已经通过语法检测,在解析执行期间发生异常
      异常处理语法:
              语法1:
                  try: #可能发生错误的代码
                  except 异常类型: #当try 中发生错误时会执行expect中的代码  做一些补救措施
              语法2
                  try:
                  except 异常类型:
                  except 异常类型:
                  except 异常类型:
              语法3 #在一个except中可以有多个异常类型,用逗号隔开
                  try
                  except ():
              语法4: #万能异常 尽量少用 程序即不报错 也不正常运行 无法定位错误位置
                     # 建议输出错误信息
                  try:
                  except Exception:
              语法5: # +as 使用  通过给异常取别名获取异常的对象,对象中包含了错误信息
                 try:
                  except Exception as e:
                  #e 输出错误信息
                  print(e)
              语法6: # 先捕获能够明确的异常类型,最后捕获万能异常
                  try:
                  except ZeroDivisionError:
                  except IndexError:
                      except Exception as e:
              语法7

          try:

          except:

          else
              语法8
              import io
              finally #无论是否发生异常最后都会执行finally 中的代码
              使用场景:

     1            try:
     2               print('start')
     3               f = open('','rt',encoding='utf-8')
     4               f.write('123456')
     5               print('end')
     6           except FileNotFoundError:
     7               print('文件路径错误....')
     8           except io.UnsipporatedOperation:
     9               print('文件不能被写入...')
    10           finally:
    11               f.close()
    12           print(f.close)
    View Code

      正确使用异常处理的步骤:

    1 """
    2 1.如果能明确知道异常发生原因 就不要产生异常  使用if判断等方式
    3 2.不知道异常发生的原因 但是知道异常的类型 那就明确捕获该类型的异常
    4 3.不知道发生原因 也不知道 异常的类型 可以使用万能异常 但是一定要打印异常消息
    5 """
    View Code

      为什么要主动抛出异常?

    1 #当写了一些功能,是提供给别人的,然而使用者不按照规则会用,就会导致程序出错,而我们无法帮助用户处理这个错误
    2 #需要用raise 主动抛出异常 后面跟任意Exception的子类
    View Code

      自定义异常类

    1         class MuException(Exception):
    2             pass
    View Code

    断言: assert

         断定 很确定某个条件是成立的
              有一段代码要执行必须要保证某个条件是成立的
              简化代码,后面必须跟bool表达式
              直抛出异常AssertionError   局限性在于 异常类型固定,而且不能指定异常信息

    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    vi 整行 多行 复制与粘贴
    FPGA设计—UVM验证篇 Hello world
    武汉市最大的二手车市场
    vim 使用技巧
    CentOS 7下的软件安装方法及策略
    搜索插件:ack.vim
    Vim插件管理
    【一】 sched.h
    Android USB驱动源码分析(-)
    在Python中反向遍历序列(列表、字符串、元组等)的五种方式
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10149888.html
Copyright © 2011-2022 走看看