1.Python 异常处理
  python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。

  • 异常处理: 本站Python教程会具体介绍。
  • 断言(Assertions):本站Python教程会具体介绍。

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

   try:
  <语句> #运行别的代码
  except <名字>:
  <语句> #如果在try部份引发了'name'异常
  except <名字>,<数据>:
  <语句> #如果引发了'name'异常,获得附加的数据
  else:
  <语句> #如果没有异常发生    

  try的工作原理是:当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
  如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
  如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
  如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
  示例1:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/29 21:28
# @Author  : wwyx

try:
    ft = open("testFile.txt", "w")
    ft.write("测试异常!@!")
except IOError:
    print "文件写入异常!"
else:
    print "文件写入成功!"
    ft.close()

  示例1 运行结果

文件写入成功!

  对于示例1中的 testFile.txt 文件,我们将其属性设置为只读,然后我们再运行程序

  修改后的 程序运行结果:

文件写入异常!

4.try-finally 语句
  try-finally 语句无论是否发生异常都将执行最后的代码。

try:
<语句>
finally:
<语句> #退出try时总会执行
raise

5.异常的参数
  一个异常可以带上参数,可作为输出的异常信息参数。
  你可以通过except语句来捕获异常的参数,如下所示:

try:
正常的操作
......................
except ExceptionType, Argument:
你可以在这输出 Argument 的值...

变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。
元组通常包含错误字符串,错误数字,错误位置。
实例 2

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/29 21:28
# @Author  : wwyx
def convert(var):
    try:
        i = int(var)
    except ValueError, Argument:
        print "值类型错误:", Argument
    else:
         print "执行成功!!"

# 调用函数
convert("sdsf")

示例 2 运行结果

值类型错误: invalid literal for int() with base 10: 'sdsf'

6.触发异常
  我们可以使用raise语句自己触发异常
  raise语法格式如下:

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

  语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。
  最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

  一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。
  定义一个异常非常简单

  示例3:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/29 21:28
# @Author  : wwyx
def convert(var):
    if(var > 2):
        raise  Exception("Invalid value:", var)

# 调用函数
try:
    convert(3)
except "Invalid value:":
    print 1
else:
    print 2

  示例3 运行结果

Traceback (most recent call last):
  File "E:/python/hello/untitled3/exception.py", line 12, in <module>
    convert(3)
  File "E:/python/hello/untitled3/exception.py", line 7, in convert
    raise  Exception("Invalid value:", var)
Exception: ('Invalid value:', 3)

7.用户自定义异常
  通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
  以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
  在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

  示例3:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/29 21:28
# @Author  : wwyx
class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg
try:
    raise Networkerror("Bad hostname")
except Networkerror,e:
    print e.args

  示例3 运行结果:

('B', 'a', 'd', ' ', 'h', 'o', 's', 't', 'n', 'a', 'm', 'e')

python之最强王者(11)——异常(exception)的更多相关文章

  1. python之最强王者(10)———文件(File)、输入输出的基本操作

    1. Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 2.打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式. ...

  2. python之最强王者(7)——元组(tuple)

    1.序列(sequence): 说明:在前面的字符串列表中其实我们已经用到了序列,之所以放到这篇来讲主要是为了承上启下,方便理解和记忆. python的数据访问模型:直接存取 ,序列 ,映射 对非容器 ...

  3. python之最强王者(6)——列表(List)

    1.Python 列表(List) 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置 ...

  4. python之最强王者(3)——变量,条件、循环语句

    1.Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的 ...

  5. python之最强王者(1)——python入门简介

    1.Python简介 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像Pe ...

  6. python之最强王者(9)——函数

    1.Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但 ...

  7. python之最强王者(8)——字典(dictionary)

    1.Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包 ...

  8. python之最强王者(5)——Nunber(数字)

    1.Python Number(数字) Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. 以下实例在变量 ...

  9. python之最强王者(4)——字符串

    1.Python 中文编码 前面章节中我们已经学会了如何用 Python 输出 "Hello, World!",英文没有问题,但是如果你输出中文字符"你好,世界" ...

随机推荐

  1. VICA 架构设计(1)

    本文记录最近完成的一个通用实时通信客户端的架构.   背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 A ...

  2. 使用HttpClient的优解

    新工作入职不满半周,目前仍然还在交接工作,适应环境当中,笔者不得不说看别人的源码实在是令人痛苦.所幸今天终于将大部分工作流畅地看了一遍,接下来就是熟悉框架技术的阶段了. 也正是在看源码的过程当中,有一 ...

  3. error C4430:missing type specifier 解决错误

    错误    3    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ...

  4. C#使用GET、POST请求获取结果

    C#使用GET.POST请求获取结果,这里以一个简单的用户登陆为例. 1. 使用GET请求获取结果 1.1 创建LoginHandler.aspx处理页面 protected void Page_Lo ...

  5. maven 中snapshot版本和release版本的区别

    maven中的仓库分为两种,snapshot快照仓库和release发布仓库.snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本.定义一个组件/模 ...

  6. springmvc+mybatis+spring 整合 bootstrap html5

    A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技 ...

  7. 图解Spark API

    初识spark,需要对其API有熟悉的了解才能方便开发上层应用.本文用图形的方式直观表达相关API的工作特点,并提供了解新的API接口使用的方法.例子代码全部使用python实现. 1. 数据源准备 ...

  8. 使用apache自带日志分割模块rotatelogs,分割日志

    rotatelogs 是 Apache 2.2 中自带的管道日志程序,参数如下(参见:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/rotat ...

  9. windows 2012 r2 can't find kb2919355

    问题   解决: 1.手动安装了 Windows8.1-KB2919442-x64 2.手动下载 KB2919355 更新成功     Turns out to have been a result ...

  10. 我的MYSQL学习心得(十六) 优化

    我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...