python中的异常处理 try..except

转载 2017年08月13日 09:43:35

一、try…except

有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError

例子:

1
2
3
4
a=10
b=0
c=a/b
print "done"

运行结果:

Traceback (most recent call last):
File “C:/Users/lirong/PycharmProjects/untitled/openfile.py”, line 3, in <module>
c=a/b
ZeroDivisionError: integer division or modulo by zero

我们发现程序因为ZeroDivisionError而中断了,语句print “done” 没有运行。为了处理异常,我们使用try…except,更改代码:

1
2
3
4
5
6
7
8
a=10
b=0
try:
    c=a/b
    print c
except ZeroDivisionError,e:
    print e.message
print "done"

  


运行结果:

integer division or modulo by zero
done

这样程序就不会因为异常而中断,从而print “done”语句正常执行。

我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except

处理一组异常可以这样写(其中e代表异常的实例):

1
2
3
4
try
    pass
except (IOError ,ZeroDivisionError),e:
    print e

try ….except…else 语句,当没有异常发生时,else中的语句将会被执行。

例子:

1
2
3
4
5
6
7
8
9
10
a=10
b=0
try:
    c = b/ a
    print c
except (IOError ,ZeroDivisionError),x:
    print x
else:
    print "no error"
print "done"

运行结果:

0
no error
done

二、raise 引发一个异常

例子:如果输入的数据不是整数,则引发一个ValueError

1
2
3
4
5
inputValue=input("please input a int data :")
if type(inputValue)!=type(1):
    raise ValueError
else:
    print inputValue

假设输入1.2,运行结果为:

please input a int data :1.2
Traceback (most recent call last):
File “C:/Users/lirong/PycharmProjects/untitled/openfile.py”, line 3, in <module>
raise ValueError
ValueError

如果输入1,运行结果为:

please input a int data :1
1

三、try …finally 

无论异常是否发生,在程序结束前,finally中的语句都会被执行。

1
2
3
4
5
6
a=10
b=0
try:
    print a/b
finally:
    print "always excute"

运行结果:

Traceback (most recent call last):
always excute
File “C:/Users/lirong/PycharmProjects/untitled/openfile.py”, line 4, in <module>
print a/b
ZeroDivisionError: integer division or modulo by zero

虽然有异常发生,但在程序终止前,finally中的语句也能正常执行。。

finally语句也可以和except语句一起使用。

1
2
3
4
5
6
7
8
a=10
b=0
try:
    print a/b
except:
    print "error"
finally:
    print "always excute"

运行结果:

error

always excute

四、自定义一个异常类

自定义一个MyException类,继承Exception。

1
2
3
4
class MyException(Exception):
    def __init__(self,message):
        Exception.__init__(self)
        self.message=message   

如果输入的数字小于10,就引发一个MyException异常:

1
2
3
4
5
6
a=input("please input a num:")
if a<10:
    try:
        raise MyException("my excepition is raised ")
    except MyException,e:
        print e.message

  

运行结果:

please input a num:1
my excepition is raised

五、python所有的标准异常类:

异常名称描述
BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
SystemExit Python 解释器请求退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionError 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
KeyboardInterrupt 用户中断执行(通常是输入^C)
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 用户代码生成的警告

  

  

 

  

Python中异常处理简单示例(try,except,finally)

#-*-coding:utf-8-*- import sys def Main(): try: f=open('firstpython.py') s=f.readline() print...
  • Liupeng8989
  • Liupeng8989
  • 2015年05月04日 21:27
  • 1134

python try except 捕获所有异常

python 捕获所有异常 try except 1 2 3 4 5 try:       a=b       b=c   except Exception,e:  ...
  • YMD8005
  • YMD8005
  • 2017年09月21日 15:46
  • 997

python try/except/finally

稍微总结一下,否则总是忘。 x = 'abc' def fetcher(obj, index): return obj[index] fetcher(x, 4) 输出: File "te...
  • spch2008
  • spch2008
  • 2013年07月16日 15:47
  • 46720

python中的异常处理:try...except...else...finally语句

与 其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错误(python作为脚本语言 没有编译的环节,在执行过程中对语法进行检测,出错后...
  • drdairen
  • drdairen
  • 2016年04月14日 16:23
  • 2230

Python中try...except...else的用法

最近在学习Python,于是总结一些基础的语法,以供自己复习查看,同时提供给有需要的朋友们。。 本篇总结了Python中try...except...else的用法。 try:     ...
  • u013088799
  • u013088799
  • 2014年09月06日 14:45
  • 12711

python之try-except语句

try: a=1/0 except: print 'here is a error' try: b=1/0 except: pass 第一个语句输出了print的字符串,第二...
  • mengtianwxs
  • mengtianwxs
  • 2016年07月24日 20:50
  • 190

python基础知识三——try与except处理异常语句

try/except介绍 与其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错(python作为脚本语言没有编译的环节,在执行过...
  • f156207495
  • f156207495
  • 2017年10月29日 20:28
  • 1342

Python 异常处理 Python 基础教程 try..except

异常处理在之前的学习中我们一直没有接触过。 哦对,我们甚至还不知道怎么向程序输入一段字符串。那么我们在这里提供一个小例子。 在命令行中,我们输入 s = raw_input('Ent...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年05月03日 14:17
  • 1115

Python基本语法_异常处理详解

目录目录 异常 异常类型 异常处理 触发异常raise 传递异常 assert语句触发异常 捕获异常tryexceptelse 捕捉多个异常 tryfinally语句 自定义异常 withas触发异常...
  • Jmilk
  • Jmilk
  • 2015年11月26日 01:40
  • 5622

python中的异常处理 try..except

一、try…except 有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError 例子: ?1234a=10b=0c=a/b...
  • qq_37054356
  • qq_37054356
  • 2017年08月13日 09:43
  • 212
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python中的异常处理 try..except
举报原因:
原因补充:

(最多只允许输入30个字)