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

    re 模块

    • findall

    • search

    • match

      • ret =re.math("d+","324ajfldksj")
      • `print (ret.goup())
      • 重头开始匹配,相当于
      • ret = re.search("^d+","324ajfldksj")
      • print(ret.goup())
    • (?:正则表达式) 表示取消优先显示功能

    • `(?P<组名>正则表达式)

    异常处理

    • 异常

      • 在编译阶段没问题,在执行阶段才报错
    • 语法错误

      • 在程序执行前就规避掉,不应该留到程序中来处理
        • 在编译阶段出现的报错,飘红
    • 异常出现之后,程序就不继续执行了

    • 如何查看异常?

    • 基本语法:

      • try:

        • 被检查的代码块
      • execpt 异常类型:

        • try中一旦检测到异常,就会执行execpt下的代码块

        • try:
              f = open("a.txt")
              g = (line.strip() for line in f)
              print(next(g))
              print(next(g))
              print(next(g))
              print(next(g))
          except StopIteration:
              f.close()       #当print(next(g)读完后,下一句print(next(g))就会报错,
                              # 然后触发except语句,执行f.close()
                  
          l = ['登陆','注册']
          try:
              num = int(input('num : '))
              print(l[num - 1])
          except (ValueError,IndexError): #可以将错误类型写在一起
              print('输入了错误的内容')
          
          
    • 多分支

      • l = ['登陆','注册']
        try:
            num = int(input('num : '))
            print(l[num - 1])
        except ValueError:
            print('输入了错误的内容')
        except IndexError:
            print('您输入的内容不在范围内')
        #利用多分支,执行不同错误后的不同语句
        
    • 万能异常 (慎用)尽量不要直接用来处理错误

      try:
          int("sfh")
      except Exception:
          print("异常啦")    #异常啦   即遇到错误就执行万能异常
      
      • 可以放在多分支最后,当遇到未知错误时,执行Exception后的代码块。
      l = ['登陆','注册']
      try:
          num = int(input('num : '))
          print(l[num - 1])
      except (ValueError,IndexError):
          print('输入了错误的内容')
      except Exception as e:
          print(e)
      
    • 异常处理中的其他机制

      • else 与for else语句类型相似,for语句中不能被打断,否则不会执行else语句

      • try:
            pass
            #发邮件的逻辑
        except 错误类型:
            print("执行某个处理")
        else:
            pass
            #汇报这段代码执行完了:才能执行else语句
        
    • finallly 无论如何都要执行,

      • 应用场景:收尾工作,打开一个文件,占用一个网络资源,打开了一个文件,执行完后或者出现错误,都需要进行关闭文件,这时候finally就完美做到这点

      • # try:
        #     f = open('content')
        #     name		#遇见错误
        # finally:
        #     f.close()		#无论如何都会执行
        #     print('closed')
        
    • raise 主动触发异常

    • try:
          raise TypeError("类型错误")
      except Exception as e:
          print(e)
      

      自定义异常

      class EvaException(BaseException):
          def __init__(self,msg):
              self.msg=msg
          def __str__(self):
              return self.msg
      
      try:
          raise EvaException('类型错误')
      except EvaException as e:
          print(e)
      
    • 断言

      • assert 1 == 1	#满足条件才执行
        print('*'*100)
        assert 1 == 2
        print('*'*100)
        

    常见 错误类型

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

  • 相关阅读:
    【STL源码学习】STL算法学习之二
    android_SurfaceView 画图
    android_layout_linearlayout(一)
    LINUX_记录(一)
    工作经验之石氏thinking
    android_layout_linearlayout(二)
    android_layout_relativelayout(一)
    两个线程解决一个线程卡之路
    android_layout_relativelayout(二)
    android_layout_framelayout
  • 原文地址:https://www.cnblogs.com/yuncong/p/9630121.html
Copyright © 2011-2022 走看看