python程序出现了异常会执行哪个语句_Python程序的异常处理和检测

处理程序出现的异常

在前面学习Python语言的过程中,你一定遇到了程序崩溃或因未解决的错误而终止的情况。你会看到Python解释器向你提供的出错信息,包括错误名称、原因和发生错误的行号。这就是程序在执行过程中发生的异常。

32fa828ba61ea8d31bb7766c9b7cb949241f58ba.jpeg?token=9345bffab85cfcc9cbad323a654431d3

我们来看几个Python程序异常的例子。

NameError:尝试访问一个未声明的标识符>>> widthTraceback (most recent call last):File "", line 1, in NameError: name 'width' is not defined>>>

因为在程序代码中没有定义width标识符(width是一个变量),Python解释器给出异常信息。

Traceback (most recent call last)是回溯最近发生异常的代码,File "", line 1, in 意思是发生错误的代码在文件的第1行。

NameError异常表示我们访问了一个没有初始化的变量。Python解释器会在程序的命名空间中查找width,如果在命名空间中没有找到,Python解释器就会引发NameError异常。

ZeroDivisionError:除数为零异常

>>> a=20>>> b=0>>> a/bZeroDivisionError: division by zero

ZeroDivisionError异常表示发生了除数为零的异常。

IndexError:序列对象越界访问异常>>> student = ["Yohn","David"]>>> student[0]'Yohn'>>> student[2]IndexError: list index out of range

IndexError异常表示我们在使用索引访问一个序列对象的元素时,已经超出了该序列的索引范围。

为防止异常的发生,开发人员必须要对此类错误进行预防和处理,对异常处理的过程就称为异常处理。在工作和现实生活中,也有很多异常处理的事例。例如,在软件项目开发过程中,团队成员的突然离职、客户对需求的变更、开发进度拖延等情况的发生,都会导致项目开发过程出现异常,并需要项目经理及时处理这些异常情况。

异常不可避免,但可以对异常做出预测和预处理,预测什么情况下会出现异常,以及出现异常后如何处理。

例如,前面谈到的软件项目开发过程出现的异常,可以在项目管理计划书中针对团队成员离职、需求变更、进度拖延出现的异常,制定详尽的应对计划,该应对计划就是异常处理。

对于Python程序而言,内存溢出、访问序列元素超出索引范围、除零操作、输入输出错误等操作都会引发程序异常。因此,我们在编写代码时,需要对上面的情况做出预测,并添加出现异常时的处理语句,以提高程序的稳定性。

在不支持异常处理的程序设计语言中,程序员为了检查可能发生的异常情况,需要使用很多的if—elif语句,这就要求程序员非常清楚地知道是什么导致了异常的产生,以及异常的确切含义。

无异常处理机制的代码如下:

#定义除法函数def div(a,b):if a == None:print("a不能为空");return -1;elif b == None:print("b不能为空");elif b == 0:print("除数不能为0");return a/b;print(div(None,8));print(div(10,0));print(div(20,2));

上面的代码定义了div函数,用于除法计算。函数在进行计算之前需要判断传入的参数a和参数b是否符合要求,它们不能为None值、参数b不能为零。计算之前判断参数主要是为了防止除数为零、访问None值异常的发生。

有异常处理机制的语言,没有必要去编写上述的这些if—elif语句。在默认的情况下,异常会输出一个错误消息,并中止程序的执行。为了更好地处理异常情况,程序员通常会在程序中定义异常处理语句来捕获和处理异常情况。Python语言提供了try语句来捕获和处理异常,如何使用try语句在下一节课会详细讲解。

下面我们使用try语句对上面的例子代码提供异常处理的支持,修改后的代码如下:

try:except Exception:return "参数错误"

采用try语句不仅可以使代码变得更简洁,而且能为程序调试提供很大的方便,从而达到提高程序稳定性的目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值