一文看懂Python异常处理(exception, try和raise语句)

一个Python程序在运行时,如果解释器遇到到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常(Exception)。即便Python程序的语法是正确的,还是会有各种各样意想不到的异常或错误。大多数的异常都不会被程序处理,而是以错误信息的形式展现出来,如下所示:

>>> 10 * (1/0)
Traceback (most recent call last):
File '<stdin>', line 1, in ?
ZeroDivisionError: division by zero
>>> 4 + spam*3
Traceback (most recent call last):
File '<stdin>', line 1, in ?
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
File '<stdin>', line 1, in ?
TypeError: Can't convert 'int' object to str implicitly

异常以不同的类型出现,这些类型都作为信息的一部分打印出来: 例子中的类型有 ZeroDivisionError,NameError 和 TypeError。

Python的内建异常

Python的一些常见內建异常如下所示,这些都是你必须熟知和掌握的。

Exception       常规错误的基类AttributeError  对象没有这个属性IOError         输入/输出操作失败IndexError      序列中没有此索引(index)KeyError        映射中没有这个键NameError       未声明/初始化对象 (没有属性)SyntaxError     Python 语法错误TypeError       对类型无效的操作ValueError      传入无效的参数ZeroDivisionError   除(或取模)零 (所有数据类型)

完整内置异常见下图:

异常处理

没有异常处理的特点是出现异常会终止程序执行。比如下例中当你输入的x不是整数时,程序会立刻中止并抛出异常,ok和end不会被打印。

print('start.....')
x = int(input('Please enter a number: '))
print('number:',x)
print('ok....')
print('end.....')

使用了有异常处理的代码,程序会执行到最后。

print('start.....')try:    x = int(input('Please enter a number: '))    print('number:',x)    print('ok....')except ValueError:    print('Oops!  That was no valid number.  Try again')print('end.....')

try语句按照如下方式工作;

  • 首先,执行try子句(在关键字try和关键字except之间的语句)

  • 如果没有异常发生,忽略except子句,try子句执行后结束。

  • 如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。

  • 如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。最后一个except子句可以忽略异常的名称,它将被当作通配符使用。你可以使用这种方法打印一个错误信息,然后再次把异常抛出。

import sys

try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print('OS error: {0}'.format(err))
except ValueError:
print('Could not convert data to an integer.')
except:
print('Unexpected error:', sys.exc_info()[0])
raise

一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:

    except (RuntimeError, TypeError, NameError):        pass
异常处理实例

我们用一个实例体会下关于try语句的要点。

  • 一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行

  • 最后一个except子句可以忽略异常的名称,它将被当作通配符使用

print('start.....')
try:
x = int(input('Please enter a number: '))
print('number:',x)
print(100/x)
print('ok....')
except ValueError:
print('非纯数字错误!')
except ZeroDivisionError:
print('不可以为零错误!')
except:
print('可选的未知错误!')
print('end.....')
  • 一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组

print('start.....')try:    x = int(input('Please enter a number: '))    print('number:',x)    print(100/x)    print('ok....')except (ValueError,ZeroDivisionError):    print('非纯数字或不可以为零错误!')except:    print('可选的未知错误!')    raise   #重新抛出这个异常print('end.....')

抛出异常(自行抛出异常)

Python 使用 raise 语句抛出一个指定的异常。例如:

>>> raise NameError('HiThere')
Traceback (most recent call last):
File '<stdin>', line 1, in ?
NameError: HiThere
  • raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

  • 如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

>>> try:        raise NameError('HiThere')    except NameError:        print('An exception flew by!')        raise

An exception flew by!Traceback (most recent call last):  File '<stdin>', line 2, in ?NameError: HiThere

参考原文:

https://edu.csdn.net/notebook/python/week02/2.html

(0)

相关推荐

  • python try异常处理

    什么是异常 python异常捕获,在刚开始学的时候,经常会遇到两种报错信息:语法错误和执行的异常. 语法错误在执行的时候就会报错,同时控制端会告诉你错误所在的行: 但即便python程序语法是正确的, ...

  • 一文看懂Python的装饰器

    在 Python 中使用装饰器,可以在不修改代码的前提下,为已有的函数添加新功能,例如打印日志.缓存数据等. 为什么需要装饰器 假如你要为某个函数添加新功能.直接的办法是,在该函数中实现这个功能,或者 ...

  • 一文看懂Python系列文章 - 入门与进阶必备

    本文收集整理了本公众号已发表的一文看懂Python系列精华文章,建议先收藏后阅读. 入门篇 一文看懂Python列表.元组和字符串操作 一文看懂Python字典类型数据常见操作及排序 一文看懂Pyth ...

  • 一文看懂Python面向对象编程(Python学习与新手入门必看)-绝对原创

    尽管网上有许多关于Python面向对像的编程介绍,小编我看完后总觉得不是很满意,也不过瘾,所以决定自己亲自动手写篇文章,帮你理解Python面向对象的编程的基本概念和核心思想.本文内含很多实例代码,以 ...

  • 一文看懂Python系列之装饰器(decorator)(工作面试必读)

    Python的装饰器(decorator)可以说是Python的一个神器,它可以在不改变一个函数代码和调用方式的情况下给函数添加新的功能.Python的装饰器同时也是Python学习从入门到精通过程中 ...

  • 一文看懂Python中的集合运算&,|,

    关于集合的概念 Python 中常用的集合方法是执行标准的数学运算,例如:求并集.交集.差集以及对称差.下图显示了一些在集合 A 和集合 B 上进行的标准数学运算.每个韦恩(Venn)图中的红色部分是 ...

  • 一文读懂Python中的异常处理

    异常处理语句 try...excpet...finally 实例代码 def div(a, b):    try:        print(a / b)    except ZeroDivision ...

  • 一文带你看懂Python数据分析利器——Pandas的前世今生

    来  源:Python大数据分析 作  者:朱卫军 本文将从Python生态.Pandas历史背景.Pandas核心语法.Pandas学习资源四个方面去聊一聊Pandas,期望能带给大家一点启发. P ...

  • 一文看懂用Python读取Excel数据

    导读:现有的Excel分为两种格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上). Python处理Excel文件主要是第三方模块库xlrd.xlwt.pyexcel- ...

  • 一文看懂“碳交易”

    文 章 导 读 根据国家统一部署,全国碳市场将在今年6月底前启动上线交易!但是,究竟什么是碳交易?恐怕,好多人不一定能讲的明白.今天主要和大家梳理一下有关碳中和.碳交易.碳配额背后的名词概念,希望对大 ...