Python学习笔记之异常

Python用异常对象来表示异常情况,如果异常对象未被处理或捕捉,程序就会回溯(traceback)中止执行。

异常可以在出错时自动引发,也可以主动引发。

异常被引发后如果不被处理就会传播至程序调用的地方,直到主程序(全局作用域),如果主程序仍然没有异常处理,程序会带着栈跟踪终止。

raise:引发异常

>>> raise Exception
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    raise Exception
Exception

>>> raise Exception("error!!!")
  Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
  raise Exception("error!!!")
  Exception: error!!!

常见内建异常类:

类名 描述
Exception 所有异常的基类
AttributeError 特性引用或赋值失败时引发
IOError 试图打开不存在文件(包括其他情况)时引发
IndexError 在使用序列中不存在的索引时引发
KeyError 使用映射中不存在的键引发
NameError 找不到名字(变量)时引发
SyntaxError 在代码为错误形式时引发
TypeError 在内建操作或者函数应用于错误类型的对象引发 
ValueError 在内建操作或者函数应用于正确的对象,但是该对象使用不合适的值引发
ZeroDivision 在除法或者模除操作的第二个参数为0时引发

自定义异常类:继承自Exception

class DefException(Exception):pass

捕捉异常:使用try/except语句实现>>> try:

    x =  int(input("The first num:"))
    y = int(input("The second num:"))
    print(x/y)
except ZeroDivisionError:
    print("Error")

The first num:5
The second num:0
Error
>>> try:
    x =  int(input("The first num:"))
    y = int(input("The second num:"))
    print(x/y)
except ZeroDivisionError:
    print("Error")
except ValueError:
    print("TypeError")

The first num:5
The second num:o
TypeError

用一个块捕捉多个异常:

>>> try:
    x =  int(input("The first num:"))
    y = int(input("The second num:"))
    print(x/y)
except (ZeroDivisionError,ValueError):
    print("Error")

The first num:5
The second num:0
Error

捕捉对象:

>>> try:
    x =  int(input("The first num:"))
    y = int(input("The second num:"))
    print(x/y)
except (ZeroDivisionError,ValueError) as e:
    print(e)

The first num:5
The second num:0
division by zero

捕捉所有异常:

try:
    x = int(input("The first num:"))
    y = int(input("The second num:"))
    print(x/y)
except:
    print("some errors")
The first num:5
The second num:
some errors

这种方式会捕捉用户中止执行的企图,会隐藏所有程序员未想到并且未做好准备的错误。

对于异常情况进行处理:

#在输入不合法时循环,直到合法值出现退出循环
while True:
    try:
        x = int(input("The first num:"))
        y = int(input("The second num:"))
        print(x/y)
    except:
        print("Error")
    else:
        break

#运行结果

The first num:5
The second num:0
Error
The first num:6
The second num:3
2.0

finally子句:用在可能的异常后进行清理,不管是否有异常都要执行。在同一个try语句中,不可以和except使用。

x = None
try:
    x = 1/0
finally:
    print("cleaning")
    del x

#结果
cleaning
Traceback (most recent call last):
  File "input.py", line 4, in <module>
    x = 1/0
ZeroDivisionError: division by zero

***Repl Closed***

可以在一条语句中组合使用try,except,else,finally

try:
    x = 1/0else:
    print("done")
finally:
    print("cleaning")

#运行结果
cleaning

***Repl Closed***
时间: 2024-10-11 21:30:07

Python学习笔记之异常的相关文章

python学习笔记(异常)

什么是异常 python用异常对象(exception object)来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的 回溯(Traceback, 一种错误信息)终止执行 >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0ZeroDivisionError: integer divisi

Python学习笔记--未经排版

Python 学习笔记 Python中如何做到Print() 不换行 答:Print("输出内容",end='不换行的分隔内容'),其中end=后面为2个单引号 注:在Python 2.x中,Print "输出内容", 即在输出内容后加一逗号 Python中 is 和 == 的区别 答:Python中的对象包含三要素:id.type.value 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值 is判断的是a对象是否就是b对象,是通过id来

python 学习笔记 6 -- 异常处理

当你的程序中出现某些 异常的 状况的时候,异常就发生了.例如,当你想要读某个文件的时候,而那个文件不存在.或者在程序运行的时候,你不小心把它删除了. 那么如果你是在IDE中运行,一个错误发生,异常会被打引出来,这便是未处理异常:当异常发生时,如果没有代码去关注和处理它,这些异常会传给置在Python中的缺省处理,他会输出一些调试信息并且终止运行.如果是在IDE中,这不是什么大事,但是如果是Python程序运行中的异常,它会导致整个程序终止,对于这些情况可以使用异常来处理. 1.try..exce

python学习笔记十——异常处理

1.try: command except 错误类型,记录错误信息变量: command finally: command try...finally的用处是无论是否发生异常都要确保资源释放代码的执行.一般来说,如果没有发生错误,执行过try语句块之后执行finally语句块,完成整个流程.如果try语句块发生了异常,抛出了这个异常,此时就马上进入finally语句块进行资源释放处理.如下从几个细节讨论finally的特性. 1).try中的return: 当在try语句块中含有return语句

雨痕 的《Python学习笔记》--附脑图(转)

原文:http://www.pythoner.com/148.html 近日,在某微博上看到有人推荐了 雨痕 的<Python学习笔记>,从github上下载下来看了下,确实很不错. 注意,这本学习笔记不适合Python新手学习. 从目录上看,并不能看出这本笔记有何特别之处,但看到里面的内容,感到非常惊喜.这本书更多的是关注一些底层的实现细节,以及更多的考虑性能方面(讲解内容很多会涉及到内存管理.缓存.垃圾回收.堆栈帧等方面的内容). 目前本笔记的最近更新时间为2013.03.30.大家可以到

01-Python学习笔记-基础语法

Python标识符 -d           在解析时显示调试信息 -O           生成优化代码 ( .pyo 文件 ) -S           启动时不引入查找Python路径的位置 -v            输出Python版本号 -X           从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时. -c cmd     执行 Python 脚本,并将运行结果作为 cmd 字符串. file           在给定的python文件执行python脚本. P

python 学习笔记 7 -- Python关键字总结

0.写在前面的话 学习一门语言最重要的功课是练习与复习,在<笨方法学Python>中第三十七节虽然没有教你任何内容,但是它提醒我们:"学了这么多,你还能记得多少?该复习了!" 下面我们就对这一节的第一部分"关键字"来做个复习: Python中的关键字包括如下: and       del        from      not      while    as        elif       global    or       with     

【Python学习笔记之二】浅谈Python的yield用法

在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor). 一.迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前

【Python学习笔记】集合

概述 集合的一般操作 内建函数进行标准操作集合 数学运算符进行标准操作集合 集合的应用 概述 python的集合(set)是无序不重复元素集,是一种容器.集合(set)中的元素必须是不可变对象,即可用被哈希,这和字典的键是一样的,所以列表.字典等可变对象不可作为set的元素.集合不提供索引或切片操作,即对象不存在相关的键值.python中的集合分为两种:set是可变的集合,frozenset是不可变的集合. 集合的创建使用关键字set或frozenset, 参数可以是列表.字符串或元组等不可变对