Python异常处理

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


使用Python附加到JSON文件

使用Python读取,写入和解析JSON

在Python中初始化:您需要了解的一切

建立数据驱动,关键字驱动和混合Selenium框架这些你了解吗

您需要了解的有关Selenium等待方法

如何在Selenium WebDriver中查找元素?(二)

如何在Selenium WebDriver中查找元素?(一)

python之函数基础

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试test

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值