Chinaunix首页 | 论坛 | 博客
  • 博客访问: 231222
  • 博文数量: 57
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 557
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-01 18:05
文章分类

全部博文(57)

文章存档

2017年(57)

我的朋友

分类: Python/Ruby

2017-11-08 17:18:01

python异常

python
用异常对象(exception object)来表示异常情况。遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的 回溯(Traceback, 一种错误信息)终止执行:


为了引发异常,可以使用一个类(Exception的子类)或者实例参数数调用raise 语句.系统自带的内建异常类


常用的内建异常类:

异常的抛出机制:

1、如果在运行时发生异常,解释器会查找相应的处理语句(称为handler.

2、要是在当前函数里没有找到的话,它会将异常传递给上层的调用函数,看看那里能不能处理。

3、如果在最外层(全局“main”)还是没有找到的话,解释器就会退出,同时打印出traceback以便让用户找到错误产生的原因。

 

捕捉异常

我们可以使用 try/except 来实现异常的捕捉处理。

try:
   正常的操作
  .............................
except ExceptionType,Argument:
   出现错误时处理



实例:

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.xie
  4. # @Time :2017-11-08 17:14
  5. # @file :error2.py


  6. # 定义函数
  7. def temp_convert(var):
  8.     try:
  9.         return int(var)
  10.     except ValueError, Argument:
  11.         print "传入的参数不是数字\n", Argument

  12. # 调用函数
  13. temp_convert('acb');

我们可以使用raise语句自己触发异常

raise语法格式如下:
raise [Exception [,args [, traceback]]]
实例:

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.xie
  4. # @Time :2017-11-08 11:43
  5. # @file :error.py


  6. try:
  7.     10/0
  8. except Exception as e:
  9.     print 'Hello'
  10.     raise e

  11. else:
  12.     print 'ok'
  13. finally:
  14.     print 'end'

执行结果:
Hello
end
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/s14/day15/error.py", line 12, in
    raise e
ZeroDivisionError: integer division or modulo by zero
raise 用于抛出(或者说打印出)异常信息,类似于 print 的用法,异常被抛出后程序便停止运行,但是finally 语句会继续执行
所以,打印出"end"


阅读(1405) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~