day14-python异常处理

摘要:
异常是表示错误的Python对象。当Python脚本发生异常时,我们需要捕获并处理它,否则程序将终止执行。异常的最常用形式我们日常工作中最常用的异常处理形式:try:正常操作…………..异常:发生异常时执行此代码……….否则:如果没有异常,最后执行此代码:无论如何,最后一个必须执行的代码是一个示例:try:a=10b=0a/beexceptionexceptionase case:print'aaaaaaaa',E#raiseeelse:printfinally:printresult:aaaaaaaa整数除法或零最终解释:10/0捕获此异常,直接打印aaaaaa和异常信息,最后打印。Try:a=10b=0a/exceptExceptionase:print'aaaaaa',eraiseeeelse:printfinally:printprintResult:aaaaa integerdivisionorlobyzeroTraceback:finallyFile“E:/test/test.py”,第11行,在raiseeZeroDivisionError:integerdivisionor lobyzero中解释raise关键字捕获异常并抛出它们。

1.     异常

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。最常用异常的形式

 异常的常用形式

我们平时工作中最长用到的异常处理的形式:

try:

    正常的操作

   ......................

except:

    发生异常,执行这块代码

   ......................

else:

    如果没有异常执行这块代码

finally:

    不管如何,最后一定要执行的代码

举个例子:

try:

     a = 10
     b = 0
     a/b

except Exception as e:

    print 'aaaaaaa', e

    # raise e

else:

    print('ok')

finally:

print('finally')

结果:

aaaaaaa integer division or modulo by zero

finally

解释:10/0捕获到这个异常,直接打印aaaaaaa和异常信息,最后打印finally。

当我们把10/0改成10/2的时候

try:
    a =10
    b = 2

    10/2

except Exception as e:

    print 'aaaaaaa', e

    # raise e

else:

    print('ok')

finally:

    print('finally')

结果:

ok

finally

解释:

没有捕获到异常,直接走else,最后还是需要走finally,不管有没有捕获异常finally是最后都需要执行的。

Excepthion异常类

Excepthion是所有的异常基础类(),对于python的标准异常,我们列出如下,以做参考:

异常名称

描述

  

BaseException

所有异常的基类

SystemExit

解释器请求退出

KeyboardInterrupt

用户中断执行(通常是输入^C)

Exception

常规错误的基类

StopIteration

迭代器没有更多的值

GeneratorExit

生成器(generator)发生异常来通知退出

StandardError

所有的内建标准异常的基类

ArithmeticError

所有数值计算错误的基类

FloatingPointError

浮点计算错误

OverflowError

数值运算超出最大限制

ZeroDivisionError

除(或取模)零 (所有数据类型)

AssertionError

断言语句失败

AttributeError

对象没有这个属性

EOFError

没有内建输入,到达EOF 标记

EnvironmentError

操作系统错误的基类

IOError

输入/输出操作失败

OSError

操作系统错误

WindowsError

系统调用失败

ImportError

导入模块/对象失败

LookupError

无效数据查询的基类

IndexError

序列中没有此索引(index)

KeyError

映射中没有这个键

MemoryError

内存溢出错误(对于Python 解释器不是致命的)

NameError

未声明/初始化对象 (没有属性)

UnboundLocalError

访问未初始化的本地变量

ReferenceError

弱引用(Weak reference)试图访问已经垃圾回收了的对象

RuntimeError

一般的运行时错误

NotImplementedError

尚未实现的方法

SyntaxError

Python 语法错误

IndentationError

缩进错误

TabError

Tab 和空格混用

SystemError

一般的解释器系统错误

TypeError

对类型无效的操作

ValueError

传入无效的参数

UnicodeError

Unicode 相关的错误

UnicodeDecodeError

Unicode 解码时的错误

UnicodeEncodeError

Unicode 编码时错误

UnicodeTranslateError

Unicode 转换时错误

Warning

警告的基类

DeprecationWarning

关于被弃用的特征的警告

FutureWarning

关于构造将来语义会有改变的警告

OverflowWarning

旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning

关于特性将会被废弃的警告

RuntimeWarning

可疑的运行时行为(runtime behavior)的警告

SyntaxWarning

可疑的语法的警告

UserWarning

用户代码生成的警告

raise关键字

raise用来触发异常,

语法如下:

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

语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

try:
    a = 10
    b = 0
    a/b

except Exception as e:

    print 'aaaaaaa', e

    raise e

else:

    print('ok')

finally:

print('finally')

print('hello world')

结果:

aaaaaaa integer division or modulo by zero

Traceback (most recent call last):

finally

  File "E:/test/test.py", line 11, in <module>

    raise e

ZeroDivisionError: integer division or modulo by zero

解释:

raise关键字就是捕获到异常,并抛出。程序运行终止。但是finally还是会执行的。所以最后的hello world没有打印出来。

免责声明:文章转载自《day14-python异常处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇基于自然语言的软件工程和程序设计二维差分基础下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python 创建、进入、退出虚拟环境

创建虚拟环境: python -m venv myvnev 进入虚拟环境(windows): cd myvenvcd Script activate linux: cd myvenv/bin/ source activate 退出虚拟环境: deactivate...

python读取文件时出现多余的ufeff时的解决方法及原因

当使用python读取文件后打印结果意外多出了一个ufeff,如图: 那要如何解决呢?其实也很简单只要将encoding = 'utf-8' 改成encoding = 'UTF-8-sig'就搞定了,如图: 问题是解决了,但是这到底是什么原因呢? 答:在编写文本时保存时包含了BOM(Byte Order Mark,字节顺序标记,出现在文本文件头部,Un...

python实现同时给多个变量赋值的方法 Simultaneous Assignments

Simultaneous Assignments x,y=y,x 这个赋值的执行流程是什么? python的多元赋值原理是tuple的元组封装 (tuple packing) 和 序列拆封(sequence unpacking)。 t = 12345, 54321, 'hello!' 这是元组封装 (tuple packing) 的例子,将多个值放进tu...

scapy安装及SCTP包分析

关于Scapy scapy是一个强大的交互式数据包处理程序(使用python编写)。它能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等。它可以很容易地处理一些典型操作,比如端口扫描、tracerouting,探测,单元测试,攻击或网络发现(可替代hping,NMAP,arpspoof,ARP-SK,arping,tcpdump,te...

Linux 利器- Python 脚本编程入门(一)

导读 众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写。大多数人会认为 Bash (或者其他的 shell 语言)用起来很方便,但一些强大的语言(比如 Python)会给你带来一些其它的好处。 首先,我们会使用 Python 的命令行工具,还会接触到 Python 的面向对象特性(这篇文章的后半部分会谈到它)。 学习 P...

python- 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

1.双层装饰器 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # author:zml LOGIN_INFO=False IS_ADMIN=False defcheck_log(func): definner(): res=func() ifLOGIN_INFO: print('验证成功!') return...