首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python异常处理

Python异常处理

作者头像
用户7466307
发布2020-07-02 16:14:40
1.1K0
发布2020-07-02 16:14:40
举报

Python中的错误可以分为两种类型,即语法错误和异常。错误是程序中的问题,由于这些问题而导致程序停止执行。另一方面,当某些内部事件发生时,会引发异常,从而改变程序的正常流程。

语法错误和异常之间的区别

语法错误:顾名思义,此错误是由代码中的错误语法引起的。它导致程序终止。

# initialize the amount variable 
amount = 10000
  
#检查您是否有资格
#是否购买Dsa Self Paced
if(amount>2999) 
    print("You are eligible to purchase Dsa Self Paced")

输出:

异常:如果程序在语法上正确,但是代码导致错误,则会引发异常。该错误不会停止程序的执行,但是会改变程序的正常流程。

例:

# 初始化数量变量
marks = 10000
  
#用0执行除法
a = marks / 0
print(a)

输出:

在上面的示例中,由于我们试图将数字除以0,因此引发了ZeroDivisionError。

注意: Exception是Python中所有异常的基类。您可以在此处检查异常层次结构。

尝试并在异常处理中除外

让我们尝试访问索引超出范围的数组元素并处理相应的异常。

# Python program to handle simple runtime error 
  
a = [1, 2, 3] 
try:  
    print "Second element = %d" %(a[1]) 
  
    # 引发错误,因为数组中只有3个元素
    print "Fourth element = %d" %(a[3])  
  
except IndexError: 
    print "An error occurred"

输出:

Second element = 2
An error occurred

一个try语句可以具有多个except子句,以指定不同异常的处理程序。请注意,最多将执行一个处理程序。

# Program to handle multiple errors with one except statement 
try :  
    a = 3
    if a < 4 : 
  
        # 抛出ZeroDivisionError为a = 3
        b = a/(a-3) 
      
    # 如果> = 4则抛出NameError
    print "Value of b = ", b 
  
# 请注意,对于多个异常,此处需要大括号()
except(ZeroDivisionError, NameError): 
    print "\nError Occurred and Handled"

输出:

Error Occurred and Handled

如果将“ a”的值更改为大于或等于4,则输出为

Value of b =  
Error Occurred and Handled

上面的输出是这样的,因为python一旦尝试访问b的值,就会发生NameError。

其他条款

在python中,您还可以在该try-except块上使用else子句,该子句必须出现在所有except子句之后。仅当try子句未引发异常时,代码才进入else块。

# Program to depict else clause with try-except 
  
#返回a / b的函数
def AbyB(a , b): 
    try: 
        c = ((a+b) / (a-b)) 
    except ZeroDivisionError: 
        print "a/b result in 0"
    else: 
        print c 
  
# 驱动程序测试上述功能
AbyB(2.0, 3.0) 
AbyB(3.0, 3.0) 

上面程序的输出将是:

-5.0
a/b result in 0

Python的最终关键字

Python提供了一个finally关键字,它总是在try和except块之后执行。在try块正常终止后或由于某些异常try块终止后,finally块始终执行。

句法:

try:
       # 一些代码...

except:
       #可选块
       #处理异常(如果需要)

else:
       # 如果没有异常则执行

finally:
      # 一些代码...(总是执行)

列子:

# Python program to demonstrate finally  
    
# 无异常try块中引发异常
try:  
    k = 5//0 # 提出除以零的异常。
    print(k)  
    
# 处理零分区异常
except ZeroDivisionError:     
    print("Can't divide by zero")  
        
finally:  
    #始终执行此块
    #不考虑异常的产生。
    print('This is always executed')

输出:

Can't divide by zero
This is always executed

引发异常

引发语句使程序员可以强制发生特定的异常。raise中唯一的参数表示要引发的异常。这必须是异常实例或异常类(从Exception派生的类)。

# 描绘引发异常的程序
  
try:  
    raise NameError("Hi there")  # 引发错误
except NameError: 
    print "An exception"
    raise  # 确定是否引发异常

上面代码的输出将简单地以行打印为“异常”,但由于最后一行的raise语句,最后也会发生运行时错误。因此,命令行上的输出将如下所示

Traceback (most recent call last):
  File "003dff3d748c75816b7f849be98b91b8.py", line 4, in 
    raise NameError("Hi there") # 引发错误
NameError: Hi there
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试test 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 语法错误和异常之间的区别
  • 尝试并在异常处理中除外
    • 其他条款
      • Python的最终关键字
      • 引发异常
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档