异常处理

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 传入一个调用者不期望的值,即使值的类型是正确的

posted @ 2018-09-11 20:33  云丛  阅读(195)  评论(0编辑  收藏  举报