博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习笔记6-异常捕获取
阅读量:6432 次
发布时间:2019-06-23

本文共 2291 字,大约阅读时间需要 7 分钟。

#--encoding:utf-8--try:    float('abc')except Exception,e:   print e   try:    float(1.2)except Exception,e:    print efinally:    print 'Done!'    #1、assert语句用来声明某个条件是真的。#2、如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。#3、当assert语句失败的时候,会引发一AssertionError。try:    assert 1==0except Exception,myError:    print 'One does equal zero silly'

 

1. 抛出异常和自定义异常

 

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

 

1.1 raise 语句

Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示:

1 # -- coding: utf-8 --2 3 def ThorwErr():4     raise Exception("抛出一个异常")5 6 # Exception: 抛出一个异常7 ThorwErr()

 

raise关键字后面是抛出是一个通用的异常类型(Exception),一般来说抛出的异常越详细越好,Python在exceptions模块内建了很多的异常类型,通过使用dir函数来查看exceptions中的异常类型,如下:

import exceptions# ['ArithmeticError', 'AssertionError'.....]print dir(exceptions)

 

传递异常

捕捉到了异常,但是又想重新引发它(传递异常),可以使用不带参数的raise语句即可:

1 # -- coding: utf-8 -- 2 class MuffledCalculator: 3     muffled = False 4     def calc(self,expr): 5         try: 6             return eval(expr) 7         except ZeroDivisionError: 8             if self.muffled: 9                 print 'Division by zero is illegal'10             else:11                 raise

 

1.2 自定义异常类型

Python中也可以自定义自己的特殊类型的异常,只需要要从Exception类继承(直接或间接)即可:

class SomeCustomException(Exception):    pass

 

2. 捕捉异常

和C#中的try/catch类似,Python中使用try/except关键字来捕捉异常,如下:

# -- coding: utf-8 --try:    print 2/0except ZeroDivisionError:    print '除数不能为0'

 

2.1 捕捉多个异常

在一个except语句只捕捉其后声明的异常类型,如果可能会抛出的是其他类型的异常就需要再增加一个except语句了,或者也可以指定一个更通用的异常类型比如:Exception,如下:

# -- coding: utf-8 --try:    print 2/'0'except ZeroDivisionError:    print '除数不能为0'except Exception:    print '其他类型异常'

 

为了捕获多个异常,除了声明多个except语句之外,还可以在一个except语句之后将多个异常作为元组列出来即可:

# -- coding: utf-8 --try:    print 2/'0'except (ZeroDivisionError,Exception):    print '发生了一个异常'

 

2.2获取异常信息

每个异常都会有一些异常信息,一般情况下我们应该把这些异常信息记录下来:

# -- coding: utf-8 --try:    print 2/'0'except (ZeroDivisionError,Exception) as e:    # unsupported operand type(s) for /: 'int' and 'str'    print e

 

3. finally子句

finally子句和try子句联合使用但是和except语句不同,finally不管try子句内部是否有异常发生,都会执行finally子句内的代码。所有一般情况下,finally自己常常用于关闭文件或者在Socket中。

# -- coding: utf-8 --try:    print 2/'0'except (ZeroDivisionError,Exception):    print '发生了一个异常'finally:    print '不管是否发生异常都执行'

 转自:

转载地址:http://ywxga.baihongyu.com/

你可能感兴趣的文章
chrome禁用JS
查看>>
xp_instance_regwrite syntax
查看>>
4中IO模型介绍
查看>>
B.Icebound and Sequence
查看>>
如何去掉滚动条,
查看>>
字典的循环
查看>>
常用的日期工具类
查看>>
JSON解析
查看>>
单例模式为什么要使用静态成员变量
查看>>
iOS 报错 :Duplicate interface definition for class’*'
查看>>
输出一个字符串的全排列
查看>>
UNITY 带spriterender的对象导出为prefab时主贴图丢失的BUG
查看>>
U3D 代码自动化生成定制预置体的旋转问题
查看>>
js基础代码
查看>>
Android-GridView使用
查看>>
typescript
查看>>
【学习】java栈之 堆上分配和栈上分配
查看>>
安装wamp的方法及过程
查看>>
面向对象进阶
查看>>
OpenCV与QT联合开发示例
查看>>