Python如何进行异常处理()

本文概述

  • 常见异常
  • 没有处理异常的问题
  • python中的异常处理
  • 异常的except语句
  • 要记住的要点
  • 声明多个异常
  • finally块
  • 引发异常
  • 要记住的要点
  • 自定义异常
可以将异常定义为程序中导致程序流中断的异常情况。
每当发生异常时, 程序都会停止执行, 因此不会执行其他代码。因此, 异常是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 codeexcept 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 = http://www.srcmini.com/data def __str__(self): return repr(self.data)try: raise ErrorInCode(2000) except ErrorInCode as ae: print("Received error:", ae.data)

【Python如何进行异常处理()】输出
Received error: 2000

    推荐阅读