首页 > 编程语言 >测试开发想通过python面试环节,必须懂得异常原理

测试开发想通过python面试环节,必须懂得异常原理

时间:2023-09-27 11:37:29浏览次数:58  
标签:语句 End python except try 面试 测试 print 异常


异常定义

异常即是一个事件,该事件会在程序执行过程中发生,影响程序的正常执行。

测试开发想通过python面试环节,必须懂得异常原理_条件语句

python处理异常的方法

 

我们先通过一个例子来了解代码中引入异常处理的原因。

print('Start')
a=10
b=0
print(a/b)
print('End')

执行结果

Traceback(most recent call last):

  File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/exception_demo.py", line 4,in print(a/b)

ZeroDivisionError:division by zero

Start

Processfinished with exit code 1

大家可以看到代码出现了问题,这个结果是可以预见的,但是End并没有成功打印,这说明了print('End')语句没有被执行,所以程序中一旦出现了异常,那么异常点后面的语句是不会被执行的!

我们可以利用条件语句来解决这个问题,代码如下:

print('Start')
a=10
b=0
if b!=0:
     print(a/b)
print('End')

我们也可以通过python的异常处理机制来解决这个问题。在python中捕捉异常可以使用try/except语句。 try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。语法:try....except的语法,代码如下:

print('Start')
try:
    a=10
     b=0
     print(a / b)
except:
      print("catch exception")
print('End')

运行结果

Start

catch exception

End

大家可以看到try中的代码print(a / b)出了异常被except捕获,然后执行了print("catch exception"),最后程序正常执行完毕!

讲到这里可能有的同学会问,明明可以用条件语句就可以解决的问题,为什么还要引入异常机制呢?最简单的解释就是,用异常机制会大大的减少代码量,这个例子比较简单大家可能体会不到,在实际编码中try里面是会有很多行代码的,只要有错误那么就会被catch住!如果使用条件语句,那么就需要在多行代码中都进行判断,这个代码量可想而知!

异常的类型

异常也是分种类的,处理不同类型的错误,会使用不同的异常类型,python的标准异常包括:

BaseException 所有异常的基类

SystemExit 解释器请求退出

KeyboardInterrupt 用户中断执行

Exception 常规错误的基类

StopIteration 迭代器没有更多的值

GeneratorExit 生成器(generator)发生异常来通知退出

StandardError 所有的内建标准异常的基类

ArithmeticError 所有数值计算错误的基类

FloatingPointError 浮点计算错误

OverflowError 数值运算超出最大限制

ZeroDivisionError 除(或取模)零 (所有数据类型)

AssertionError 断言语句失败

AttributeError 对象没有这个属性

EOFError 没有内建输入,到达EOF 标记

EnvironmentError 操作系统错误的基类

IOError 输入/输出操作失败

OSError 操作系统错误

WindowsError 系统调用失败

ImportError 导入模块/对象失败

LookupError 无效数据查询的基类

IndexError 序列中没有此索引(index)

KeyError 映射中没有这个键

MemoryError 内存溢出错误(对于Python 解释器不是致命的)

NameError 未声明/初始化对象 (没有属性)

UnboundLocalError 访问未初始化的本地变量

ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象

RuntimeError 一般的运行时错误

NotImplementedError 尚未实现的方法

SyntaxErrorPython 语法错误

IndentationError 缩进错误

TabErrorTab 和空格混用

SystemError 一般的解释器系统错误

TypeError 对类型无效的操作

ValueError 传入无效的参数

UnicodeErrorUnicode 相关的错误

UnicodeDecodeErrorUnicode 解码时的错误

UnicodeEncodeErrorUnicode 编码时错误

UnicodeTranslateErrorUnicode 转换时错误

Warning 警告的基类

DeprecationWarning 关于被弃用的特征的警告

FutureWarning 关于构造将来语义会有改变的警告

OverflowWarning 旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning 关于特性将会被废弃的警告

RuntimeWarning 可疑的运行时行为(runtime behavior)的警告

SyntaxWarning 可疑的语法的警告

UserWarning 用户代码生成的警告

 

使用不同类别的异常无法捕获非自身种类的异常,例如使用IOError是无法捕获ZeroDivisionError的,代码如下:

print('Start')
try:
    a=10
    b=0
    print(a / b)
except IOError:
     print("catch exception")
print('End')

运行结果

Start

Traceback (most recent calllast):

 File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/exception_demo.py", line 5,in

    print(a / b)

ZeroDivisionError: division byzero

 

使用except可以带多种异常类型,

try:

正常的操作
   ......................
except(Exception1, Exception2,...ExceptionN):
   发生以上多个异常中的一个,执行这块代码
   ......................
try...except BaseExceptionas msg: 输出异常信息.例如:
print('Start')
try:
    a =10
    b = 0
    print(a / b)
except BaseException as msg:
     print(msg)
print('End')

输出:

Start

division by zero

End

try...except...finally

该语句的含义是无论是否发生异常都将执行最后finally中的代码。示例代码如下:

print('Start')
try:
    a =10
    b = 0
    print(a / b)
except :
    print('exception')
finally:
      print("finally")
print('End')

输出:
Start

exception

finally

End

抛出异常

raise语句允许程序员强制发生指定的异常。如果你需要确定是否引发了异常但不打算处理它时可以使用!

例如:

def  exp_fuc():
     raise IOError
exp_fuc()
print('End')

运行结果

Traceback(most recent call last):

  File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/except_demo2.py", line 7,in

    exp_fuc()

  File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/except_demo2.py", line 5,in exp_fuc

    raise IOError

OSError

可以看到代码抛出了IOError,由于没有被捕获,所以print('End')没有被执行

自定义异常

程序可以通过创建新的异常类来命名它们自己的异常。异常通常应该直接或间接地从Exception类派生。

class MyError(Exception):
      def __init__(self, value):
            self.value = value
      def __str__(self):
            return repr(self.value)
try:
       raise MyError('my error')
except MyError as e:
        print ('My exception:', e.value)

运行结果

Myexception: my error

原创不易,如果文章帮到了你,欢迎点赞转发,让更多的朋友受益!

标签:语句,End,python,except,try,面试,测试,print,异常
From: https://blog.51cto.com/liwen629/7621870

相关文章

  • 巨量代理代理IP测试,最新代理IP质量测试
    在当今互联网大数据时代,数据采集日益发展,HTTP代理在其中扮演着重要的角色。和其他产品一样,在使用HTTP代理的时候我们也会遇到诸如:稳定性、匿名程度、响应速度、IP池可用率等问题,如何对HTTP代理进行测试,才能满足我们的需求?目前市面上很多HTTP代理都有提供试用,购买之前大部分人都会试......
  • Python解释器是什么?常见的Python解释器有哪些?
    学习Python时,大家应该都听说过PythonIDE和Python解释器,也经常有人把它们混为一谈,误认为PythonIDE就是Python解释器。其实并不是,PythonIDE和Python解释器在本质上就有很大的区别,那么PythonIDE和解释器有什么区别?下面小编带着大家一起来学习一下。PythonIDEIDE,全......
  • 一文搞定Python面试必问知识点——列表
    Python3有6种标准类型:(Number(数字)、String(字符串)、Tuple(组),List(列表)、Dictionary(字典)、Set(集合))。其中,列表是Python中最基本也是最常用的数据结构。列表中的每个元素都分配一个数字,即它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。在关于python测试开发的面试中,列表是被问及频......
  • 北上广深科技项目验收测试报告标准是什么?
    ​科技项目验收测试一、科技项目验收是什么?科技项目验收是指以科学研究和技术开发为内容而单独立项的项目,其目的在于解决经济和社会发展中出现的科学技术问题。不同的科技项目,根据其性质、实施范围、运作特点有不同的分类,项目的主管单位在项目组申请结题以后组织验收的步骤。......
  • 一文读懂Python中的全局变量局部变量和作用域
    局部变量和全局变量是面试热点通常小白在写代码时,只知道引用变量来应对一些基础的编码问题,当面试官问及局部变量和全局变量的具体细节时,就会一脸懵逼,傻傻分不清楚!其实想要彻底了解局部变量和全局变量的关系,本质是大家需要明白何为作用域!这篇文章会带大家彻底搞懂这三者之的唇齿相依......
  • 测试人员快速上手Django指南
    序言作为一个测试人员如果你有以下疑问,那么这篇文章将对你有很大帮助!1.网站的业务功能是如何实现的?参考章节:视图配置-实现网站业务功能2.服务器如何解析浏览器中的url?参考章节URL配置-提供url链接3.浏览器中的网页是如何展现给大家的?参考章节:模板-html页面的展示4.服务器如何与数据......
  • 自动化测试中自定义断言的实现方法
    断言定义熟悉单元测试的同学都知道在测试用例中,执行完测试用例后,通过断言(assert)判断测试结果是pass还是fail。不同的单元测试框架都提供了断言机制,我们这里以python为例进行说明。Python中的断言类型丰富,最常用的是基础断言和集合断言。基础断言包括的核心方法如下所示,主要功能是对......
  • Python 练习实例5
    目:输入三个整数x,y,z,请把这三个数由小到大输出。程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。程序源代码:实例(Python2.0+)#!/usr/bin/python#-*-coding:UTF-8-*-l=[]......
  • Python 练习实例6
    题目:斐波那契数列。程序分析:斐波那契数列(Fibonaccisequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。在数学上,费波那契数列是以递归的方法来定义:F0=0(n=0)F1=1(n=1)Fn=F[n-1]+F[n-2](n=>2)程序源代码:方法一#!/usr/bin/python......
  • 一张图搞定技术型测试工程师的进阶之路
    话不多说,一张图搞定!!! ......