详解在Python中处理异常的教程

什么是异常?

异常是一个事件,其中一个程序,破坏程序的指令的正常流的执行过程中而发生的。一般情况下,当一个Python脚本遇到一些情况不能处理,就抛出一个异常。异常是一个Python对象,它表示一个错误。

当Python脚本抛出一个异常,它必须处理异常,否则将立即终止。
处理异常:

如果有可能会引发异常的一些可疑的代码,就可以通过将可疑的代码在一个try块:保卫你的程序。在try块,包括以下情况except:语句,其次是代码,作为优雅的处理问题,尽可能块。
语法

这里是try....except...else 块的简单语法:

try:
  You do your operations here;
  ......................
except ExceptionI:
  If there is ExceptionI, then execute this block.
except ExceptionII:
  If there is ExceptionII, then execute this block.
  ......................
else:
  If there is no exception then execute this block.

这里有一些关于上述语法要点:

  • 单个try语句可以有多个不同的语句。当try块中包含可能会引发不同类型的异常语句,这是很有用的。
  • 也可以提供一个通用的except子句,它用来处理任何异常。
  • except子句后,可以包括其他子句。块没有引发异常:在别的块中的代码,如果在try中的代码执行。
  • 在else块是不需要try:块的代码的保护。

例子

这里是简单的例子,这将打开一个文件并写入内容的文件中并移出正常:

#!/usr/bin/python

try:
  fh = open("testfile", "w")
  fh.write("This is my test file for exception handling!!")
except IOError:
  print "Error: can\'t find file or read data"
else:
  print "Written content in the file successfully"
  fh.close()

这将产生以下结果:

Written content in the file successfully

示例:

这里有一个更简单的例子,它试图打开没有权限并在文件中写入内容,所以它会引发一个异常:

#!/usr/bin/python

try:
  fh = open("testfile", "r")
  fh.write("This is my test file for exception handling!!")
except IOError:
  print "Error: can\'t find file or read data"
else:
  print "Written content in the file successfully"

这将产生以下结果:

Error: can't find file or read data

在except子句无异常:

还可以使用不同的定义如下无异常的声明:

try:
  You do your operations here;
  ......................
except:
  If there is any exception, then execute this block.
  ......................
else:
  If there is no exception then execute this block.

try-except 语句捕获所有出现的异常。使用这种try-except 声明不被认为是一个良好的编程习惯,但因为它捕获所有异常,但不会使程序员找出可能出现的问题的根本原因。
在except子句的多个异常:

也可以使用相同的除语句来处理多个异常,如下所示:

try:
  You do your operations here;
  ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
  If there is any exception from the given exception list,
  then execute this block.
  ......................
else:
  If there is no exception then execute this block.

try-finally 语句:

可以使用finally:块连同try:块。在try块是否引发异常或没有任何代码 finally块是一个必须执行的块。try-finally语句的语法是这样的:

try:
  You do your operations here;
  ......................
  Due to any exception, this may be skipped.
finally:
  This would always be executed.
  ......................

请注意,可以提供except子句或finally子句,但不能同时使用。不能同时使用else子句与finally子句。
例子:

#!/usr/bin/python

try:
  fh = open("testfile", "w")
  fh.write("This is my test file for exception handling!!")
finally:
  print "Error: can\'t find file or read data"

如果没有权限,以写入方式打开文件,那么这将产生以下结果:

Error: can't find file or read data

同样的例子可以写入更简洁,如下所示:

#!/usr/bin/python

try:
  fh = open("testfile", "w")
  try:
   fh.write("This is my test file for exception handling!!")
  finally:
   print "Going to close the file"
   fh.close()
except IOError:
  print "Error: can\'t find file or read data"

当一个异常被抛出在try块中,执行立即传递到finally块。finally块中的所有语句都执行,该异常被再次抛出,并在被处理 except 语句如果出现在一个更高的层在try-except语句。
Exception参数:

异常可以有一个参数,参数是一个值,它给出了关于这个问题的其他信息。参数按异常内容改变。可以通过不同的子句提供一个变量,如下所示捕获异常的参数:

try:
  You do your operations here;
  ......................
except ExceptionType, Argument:
  You can print value of Argument here...

如果正在编写代码来处理一个异常,可以有一个变量按照异常的名称在不同的声明。如果捕捉多个异常,可以有一个变量按照异常的元组。

这个变量将接收主要包含异常原因的异常值。该变量可以在一个元组的形式接收一个或多个值。该元组通常包含错误串,错误码和一个错误的位置。
示例:

下面是一个异常的例子:

#!/usr/bin/python

# Define a function here.
def temp_convert(var):
  try:
   return int(var)
  except ValueError, Argument:
   print "The argument does not contain numbers\n", Argument

# Call above function here.
temp_convert("xyz");

这将产生以下结果:

The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'

抛出异常:

可以通过使用raise语句抛出几个方面的异常。一般raise语句的语法。
语法

raise [Exception [, args [, traceback]]]

这里,Exception是异常的类型(例如,NameError)和参数是用于异常的参数值。该参数是可选的;如果未提供,则异常的参数是None。

最后一个参数traceback,也是可选的(并且在实践中很少使用),并且如果存在的话,那么用于异常回溯对象。
例子:

异常可以是一个字符串,一个类或一个对象。大多数Python核心抛出是类,有参数认为是类的实例的异常。定义新的异常是很容易的,可以参考如下:

def functionName( level ):
  if level < 1:
   raise "Invalid level!", level
   # The code below to this would not be executed
   # if we raise the exception

注:为了捕获一个异常,“except”语句必须引用抛出类对象或简单的字符串相同的异常。例如,捕捉到上面的异常,必须写except子句,如下所示:

try:
  Business Logic here...
except "Invalid level!":
  Exception handling here...
else:
  Rest of the code here...

用户定义的异常:

Python中,还可以通过内置的异常标准的派生类来创建自己的异常。

下面是有关RuntimeError一个例子。这里是从RuntimeError子类的类被创建。当需要显示更多的具体信息时,一个异常被捕获,这是很有用的。

在try块中,用户定义的异常引发,并夹在except块。变量e被用来创建类Networkerror的一个实例。

class Networkerror(RuntimeError):
  def __init__(self, arg):
   self.args = arg

所以一旦在上面定义的类,可以按如下方法抛出异常:

try:
  raise Networkerror("Bad hostname")
except Networkerror,e:
  print e.args
(0)

相关推荐

  • Python 错误和异常小结

    事先说明哦,这不是一篇关于Python异常的全面介绍的文章,这只是在学习Python异常后的一篇笔记式的记录和小结性质的文章.什么?你还不知道什么是异常,额... 1.Python异常类 Python是面向对象语言,所以程序抛出的异常也是类.常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不用Python了). 异常 描述 NameError 尝试访问一个没有申明的变量 ZeroDivisionError 除数为0 Synt

  • Python异常处理总结

    本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下: 1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行. ①.raise 语句 Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示: # -- coding: utf-8 -- def ThorwErr()

  • Python 异常处理实例详解

    一.什么是异常?异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行.二.异常处理捕捉异常可以使用try/except语句.try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理.如果你不想在异常发生时结束你的程序,只需在try里捕获它. 异常语法:以下为简单的try....

  • 详解在Python中处理异常的教程

    什么是异常? 异常是一个事件,其中一个程序,破坏程序的指令的正常流的执行过程中而发生的.一般情况下,当一个Python脚本遇到一些情况不能处理,就抛出一个异常.异常是一个Python对象,它表示一个错误. 当Python脚本抛出一个异常,它必须处理异常,否则将立即终止. 处理异常: 如果有可能会引发异常的一些可疑的代码,就可以通过将可疑的代码在一个try块:保卫你的程序.在try块,包括以下情况except:语句,其次是代码,作为优雅的处理问题,尽可能块. 语法 这里是try....except

  • 详解使用Python+Pycaret进行异常检测

    目录 概述 介绍 为什么是PyCaret 学习目标 PyCaret安装 数据导入 探索性异常检测分析 Swarm图 箱形图 散点图 异常检测 模型创建 隔离森林 局部异常因子 K最近邻 比较模型中的异常 解释和可视化 尾注 概述 1.通过探索性异常检测分析了解异常 2.设置 PyCaret 环境并尝试准备任务的各种数据 3.比较性能并可视化不同的异常检测算法 介绍 异常检测提供了在数据中发现模式.偏差和异常的途径,这些模式.偏差和异常不限于模型的标准行为.异常检测旨在确定数据中的异常情况.这些异

  • 详解在Python中使用Torchmoji将文本转换为表情符号

    很难找到关于如何使用Python使用DeepMoji的教程.我已经尝试了几次,后来又出现了几次错误,于是决定使用替代版本:torchMoji. TorchMoji是DeepMoji的pyTorch实现,可以在这里找到:https://github.com/huggingface/torchMoji 事实上,我还没有找到一个关于如何将文本转换为表情符号的教程.如果你也没找到,那么本文就是一个了. 安装 这些代码并不完全是我的写的,源代码可以在这个链接上找到. pip3 install torch=

  • 详解在Python中使用OpenCV进行直线检测

    目录 1.引言 2.霍夫变换 3.举个栗子 3.1读入图像进行灰度化 3.2执行边缘检测 3.3进行霍夫变换 补充 1. 引言 在图像处理中,直线检测是一种常见的算法,它通常获取n个边缘点的集合,并找到通过这些边缘点的直线.其中用于直线检测,最为流行的检测器是基于霍夫变换的直线检测技术. 2. 霍夫变换 霍夫变换是图像处理中的一种特征提取方法,可以识别图像中的几何形状.它将在参数空间内进行投票来决定其物体形状,通过检测累计结果找到一极大值所对应的解,利用此解即可得到一个符合特定形状的参数. 在使

  • 详解在Python中创建条形图追赶动画

    目录 前言 方法一:使用pause()函数 方法二:使用FuncAnimation()函数 线性图动画 Python中的条形图追赶动画 Python中的散点图动画: 条形图追赶的水平移动 前言 动画是使可视化更具吸引力和用户吸引力的好方法.它帮助我们以有意义的方式展示数据可视化.Python 帮助我们使用现有的强大 Python 库创建动画可视化.Matplotlib是一个非常流行的数据可视化库,通常用于数据的图形表示以及使用内置函数的动画. 使用 Matplotlib 创建动画有两种方法: 使

  • 详解在Python中以绝对路径或者相对路径导入文件的方法

    1.在Python中以相对路径或者绝对路径来导入文件或者模块的方法 今天在调试代码的时候,程序一直提示没有该模块,一直很纳闷,因为我导入文件一直是用绝对路径进行导入的.按道理来讲是不会出现模块找不到的情况的. 最后仔细分析了整个代码的目录结构,才发现了问题. 下面依次来说明一下今天的情况 先看导入的代码: 在demo--mnist.py文件中执行以下两种导入操作 # 第一处 from gcforest.gcforest import GCForest from gcforest.utils.co

  • 详解在MySQL中创建表的教程

    创建表的命令要求: 表的名称 表字段名称 每个字段的定义 语法: 下面是通用的SQL语法来创建一个MySQL表: CREATE TABLE table_name (column_name column_type); 现在,我们将创建下面的教程数据库表中. tutorials_tbl( tutorial_id INT NOT NULL AUTO_INCREMENT, tutorial_title VARCHAR(100) NOT NULL, tutorial_author VARCHAR(40)

  • 详解python中的异常捕获

    异常 异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随之终止. # 异常处理的三个特征 - 异常的追踪信息 - 异常的类型 - 异常的内容 捕获异常的目的:为了增强程序的健壮性,即便程序运行过程中出错,也不要终止程序,而是捕获异常并处理,将出错信息记录到日志内. # 语法上错误SyntaxError - 处理方式1:必须在程序运行前就改正 # 逻辑上的错误 - 错误发生的条件是可以预知的 --> if判断 - 错误发生的条件是无法预知的 --> 异常捕获 try 本来程序一旦出

  • 详解python中的异常和文件读写

    Python异常 1.python异常的完整语法 try: # 提示用户输入一个整数 num = int(input("输入一个整数:")) # 使用 8 除以用户输入的整数并且输出 result = 8 / num print(result) except ValueError: print("请输入正确的整数!") except Exception as result: print("未知错误:%s" % result) else: prin

  • Python中的异常类型及处理方式示例详解

    目录 前言 正文 一.什么是异常 二.异常的类型 三.异常处理 四.try 介绍 五.finally 介绍 六.raise 介绍 结尾 前言 Python 是一种面向对象的.解释型的.通用的.开源的脚本编程语言.现在市面上 Python 非常的流行,主要是因为它简单易用,学习成本低,比如要实现某个功能,Python 可能只需要几行代码,而用C语言可能需要上百行代码,因为C语言什么都要得从头开始编码,而 Python 已经内置了很多功能模块,所以,我们只需要导入特定的包,就可以实现想要的效果. 正

随机推荐