个性化阅读
专注于IT技术分析

Python如何进行异常处理?

本文概述

可以将异常定义为程序中导致程序流中断的异常情况。

每当发生异常时, 程序都会停止执行, 因此不会执行其他代码。因此, 异常是python脚本无法解决的错误。

Python为我们提供了处理异常的方法, 以便可以在不中断代码的情况下执行代码的另一部分。但是, 如果我们不处理该异常, 则解释器不会执行在此之后存在的所有代码。

常见异常

下面列出了可以从普通python程序抛出的常见异常列表。

  1. ZeroDivisionError:在数字除以零时发生。
  2. NameError:找不到名称时发生。它可以是本地的或全局的。
  3. IndentationError:如果给出了不正确的缩进。
  4. IOError:输入输出操作失败时发生。
  5. EOFError:到达文件末尾且正在执行操作时发生。

没有处理异常的问题

正如我们已经讨论的那样, 异常是异常情况, 它会中断程序的执行。考虑以下示例。

例子

a = int(input("Enter a:"))
b = int(input("Enter b:"))
c = a/b;
print("a/b = %d"%c)

#other code:
print("Hi I am other part of the program")

输出

Enter a:10
Enter b:0
Traceback (most recent call last):
  File "exception-test.py", line 3, in <module>
    c = a/b;
ZeroDivisionError: division by zero

python中的异常处理

如果python程序包含可能引发异常的可疑代码, 则必须将该代码放在try块中。在try块之后必须加上except语句, 该语句包含一个代码块, 如果try块中有异常, 将执行该代码块。

Python异常处理

句法

try:
	#block of code 

except Exception1:
	#block of code

except Exception2:
	#block of code

#other code

我们还可以将else语句与try-except语句一起使用, 如果没有异常发生在try块中, 则可以将要在场景中执行的代码放在其中。

下面给出将else语句与try-except语句结合使用的语法。

try:
	#block of code 

except Exception1:
	#block of code 

else:
	#this code executes if no except block is executed
Python异常处理

例子

try:
	a = int(input("Enter a:"))
	b = int(input("Enter b:"))
	c = a/b;
	print("a/b = %d"%c)
except Exception:
	print("can't divide by zero")
else:
	print("Hi I am else block")

输出

Enter a:10
Enter b:2
a/b = 5
Hi I am else block

异常的except语句

Python提供了不使用except语句不指定异常名称的灵活性。

考虑以下示例。

例子

try:
	a = int(input("Enter a:"))
	b = int(input("Enter b:"))
	c = a/b;
	print("a/b = %d"%c)
except:
	print("can't divide by zero")
else:
	print("Hi I am else block")

输出

Enter a:10
Enter b:0
can't divide by zero

要记住的要点

  1. Python方便我们不使用except语句指定异常。
  2. 我们可以在except语句中声明多个异常, 因为try块可能包含引发不同类型异常的语句。
  3. 我们还可以指定else块以及try-except语句, 如果try块中未引发异常, 则将执行该语句。
  4. 不引发异常的语句应放在else块内。

例子

try:
	#this will throw an exception if the file doesn't exist. 
	fileptr = open("file.txt", "r")
except IOError:
	print("File not found")
else:
	print("The file opened successfully")
	fileptr.close()

输出

File not found

声明多个异常

python允许我们使用except子句声明多个异常。在try块引发多个异常的情况下, 声明多个异常非常有用。

句法

try:
	#block of code 

except (<Exception 1>, <Exception 2>, <Exception 3>, ...<Exception n>)
	#block of code 

else:
	#block of code

例子

try:  
    a=10/0;  
except ArithmeticError, StandardError:  
    print "Arithmetic Exception"  
else:  
    print "Successfully Done"

输出

Arithmetic Exception

finally块

我们可以将finally块与try块一起使用, 在其中, 我们可以调整在try语句引发异常之前必须执行的重要代码。

下面给出了使用finally块的语法。

句法

try:
	# block of code 
	# this may throw an exception
finally:
	# block of code
	# this will always be executed
Python异常处理

例子

try:
	fileptr = open("file.txt", "r")	
	try:
		fileptr.write("Hi I am good")
	finally:
		fileptr.close()
		print("file closed")
except:
	print("Error")

输出

file closed
Error

引发异常

使用python中的raise子句可以引发异常。下面给出了使用raise语句的语法。

句法

raise Exception_class, <value>

要记住的要点

  1. 要引发异常, 请使用raise语句。异常类名紧随其后。
  2. 可以为异常提供可以在括号中给出的值。
  3. 要访问值” as”, 请使用关键字。 ” e”用作存储异常值的参考变量。

例子

try:
	age = int(input("Enter the age?"))
	if age<18:
		raise ValueError;
	else:
		print("the age is valid")
except ValueError:
	print("The age is not valid")

输出

Enter the age?17
The age is not valid

例子

try:
	a = int(input("Enter a?"))
	b = int(input("Enter b?"))
	if b is 0:
		raise ArithmeticError;
	else:
		print("a/b = ", a/b)
except ArithmeticError:
	print("The value of b can't be 0")

输出

Enter a?10
Enter b?0
The value of b can't be 0

自定义异常

python允许我们创建可以从程序引发并使用except子句捕获的异常。但是, 建议你在访问Python对象和类之后阅读本节。

考虑以下示例。

例子

class ErrorInCode(Exception):  
	def __init__(self, data):  
		self.data = data  
	def __str__(self):  
		return repr(self.data)  
  
try:  
    raise ErrorInCode(2000)  
except ErrorInCode as ae:  
    print("Received error:", ae.data)

输出

Received error: 2000
赞(0)
未经允许不得转载:srcmini » Python如何进行异常处理?

评论 抢沙发

评论前必须登录!