暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

连载|想用Python做自动化测试?错误与异常处理

明说软件测试 2020-07-02
241

8.1 概念

  • 程序中的错误通常包括两种,一种是语法或逻辑错误,另一种则是运行时的异常。

  • Python3版本的异常类型请参考:https://docs.python.org/3/library/exceptions.html。为了程序的健壮,代码要对可预知的异常进行处理。

8.2 处理异常

8.2.1 try...except

通常使用 try 和 except 来解决异常。

    try:
    s = input('please enter two numbers separated by comma: ')
    num1 = int(s.split(',')[0].strip())
    num2 = int(s.split(',')[1].strip())
    ...
    except ValueError as err:
    print('Value Error: {}'.format(err))

    except 语句块只接受与它匹配的异常类型,如果程序抛出的异常与except 语句块声明的异常类型并不匹配,代码块不会被执行。比如上面的代码,只会处理ValueError异常,其他的异常则不处理。这里的处理其实就是打印了一下。

    8.2.2 1个except中含多种异常

      try:
      s = input('please enter two numbers separated by comma: ')
      num1 = int(s.split(',')[0].strip())
      num2 = int(s.split(',')[1].strip())
      ...
      except (ValueError, IndexError) as err:
      print('Error: {}'.format(err))

      8.2.3 多个except 语句块

        try:
        s = input('please enter two numbers separated by comma: ')
        num1 = int(s.split(',')[0].strip())
        num2 = int(s.split(',')[1].strip())
        except ValueError as err:
        print('Value Error: {}'.format(err))
        except IndexError as err:
        print('Index Error: {}'.format(err))
        except Exception as err:
        print('Other error: {}'.format(err))

        Exception 是其他所有非系统异常的基类,能够匹配任意非系统异常。用它来兜底前面except块都不匹配的异常。

        8.2.4 try...except...finally

        经常和 try、except 放在一起来用。无论发生什么情况,finally 语句块中的语句都会被执行,哪怕前面的 try 和 excep 语句块中使用了 return 语句。

          import sys
          try:
          f = open('file.txt', 'r')
          f.read()
          except OSError as err:
          print('OS error: {}'.format(err))
          finally:
          f.close()

          8.2.5 try...except...else...finally

          当try语句块中没有异常发生时,执行else子句。

            try:
            ...
            except XXXError as err:
            ...
            else:
            ...
            finally:
            ...

            8.3 抛出异常

            大部分情况下,Python自动抛出异常,我们自己定义的函数遇到异常时,也可以手动抛出异常给调用者。手动抛异常时raise语句,后面接上异常类和异常描述信息。例如:

              if index>100:
              raise IndexError("索引错误")

              8.4 应用场景

              在IO读写操作时,往往需要加上IOError异常的处理。

              • 文件读写

              • 网络连接

              • 数据库链接


              文章转载自明说软件测试,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论