简明Python教程学习笔记_8_异常

 

菜鸟教程 之 Python 异常处理:http://www.runoob.com/python/python-exceptions.html

Python 一篇搞定所有的异常处理:https://www.cnblogs.com/wj-1314/p/8707804.html

 

Python 捕捉详细异常堆栈的方法

Python 中使用 try except 的方法捕获异常,可以获取到异常的种类以及自定义异常,但是有时候对于 debug 测试来说,信息不全,比如说 触发异常的具体位置在哪:

import traceback
try:num= int('abc')
except Exception:traceback.print_exc()# traceback.print_exc() 直接打印异常
# traceback.format_exc()返回字符串
# 还可以将信息写入到文件
# traceback.print_exc(file=open('error.txt', 'a+'))

 

 

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尚未实现的方法
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告

 

异常,就是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在 Python 无法正常处理程序时就会发生一个异常。

Python 中 try / except / else / finally 语句 的 完整格式如下所示:

try:# 正常执行的块
except A:# A 异常的处理
except B:# B 异常的处理
except:# 其他 异常的处理
else:# 如果没有异常,就执行 else 里面的代码
finally:# 无论有没有异常,finally 里面的代码都执行print("finally")

说明:

  • 1. 程序正常执行时,是在 try 下面的 "正常执行的块"  中执行的,当在执行过程中如果发生了异常,则中断当前在 "正常执行的块" 中的执行,然后跳转到对应的异常处理块中开始执行;
  • 2. Python 从第一个 except X处开始查找,如果找到了对应的 exception 类型则进入其提供的 exception handle 中进行处理,如果没有找到则直接进入 except 块处进行处理。except 块是可选项,如果没有提供,该 exception 将会被提交给 Python 进行默认处理,处理方式则是终止应用程序并打印提示信息;
  • 3. 如果在 "正常执行的块" 执行过程中没有发生任何异常,则在执行完成后,会进入 else 执行块中(如果存在的话)执行。
  • 4. 无论是否发生了异常,只要提供了 finally 语句,以上 try/except/else/finally 代码块执行的最后一步总是执行 finally 所对应的代码块。

注意:

  • 1. 在上面所示的完整语句中 try/except/else/finally 所出现的顺序必须是 try ---> except X ---> except ---> else ---> finally,即所有的 except 必须在 else 和 finally 之前,else(如果有的话)必须在 finally 之前,而 except X 必须在 except 之前。否则会出现语法错误。
  • 2. 对于上面所展示的 try/except 完整格式而言,else 和 finally 都是可选的,而不是必须的,但是如果存在的话 else 必须在 finally 之前,finally(如果存在的话)必须在整个语句的最后位置。
  • 3. 在上面的完整语句中,else 语句的存在必须以 except X 或者 except 语句为前提,如果在没有 except 语句的 try block 中使用 else 语句会引发语法错误。也就是说 else 不能与 try/finally 配合使用。
  • 4. except 的使用要非常小心,慎用。
class AError(Exception):"""AError---exception"""print('AError')try:#raise AErrorasdas('123')
except AError:print("Get AError")
except:print("exception")     
else:print("else")
finally:print("finally")     
print("hello wolrd")

在上面的代码中,Normal execution block 中出现了语法错误,但是由于使用了 except 语句,该语法错误就被掩盖掉了。因此在使用 try/except 时最好还是要非常清楚的知道 Normal execution block 中有可能出现的异常类型以进行针对性的处理。

当你的程序中出现某些 异常的 状况的时候,异常就发生了。例如,当你想要读某个文件的时候,而那个文件不存在。或者在程序运行的时候,你不小心把它删除了。上述这些情况可以使用异常来处理。假如你的程序中有一些无效的语句,会怎么样呢?Python 会引发并告诉你那里有一个错误,从而处理这样的情况。

 

当程序出现错误,python 会自动引发异常,也可以通过 raise 显示地引发异常。

一旦执行了 raise 语句,raise 后面的语句将不能执行。

演示 raise 用法

try:s = Noneif s is None:print "s 是空对象"raise NameError     #如果引发NameError异常,后面的代码将不能执行print len(s)  #这句不会执行,但是后面的except还是会走到
except TypeError:print "空对象没有长度"s = None
if s is None:raise NameError 
print 'is here?' #如果不使用try......except这种形式,那么直接抛出异常,不会执行到这里

 

触发异常

我们可以使用 raise 语句自己触发异常
raise语法格式:raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

 

实例
一个异常可以是一个字符串,类或对象。
Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。
定义一个异常非常简单,如下所示:

def functionName( level ):if level < 1:raise Exception("Invalid level!", level)# 触发异常后,后面的代码就不会再执行

注意:为了能够捕获异常,"except"语句必须有用相同的异常来抛出类对象或者字符串

 

例如我们捕获以上异常,"except" 语句如下所示:
try:
    正常逻辑
except Exception,err:
    触发自定义异常    
else:
    其余代码

 

实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 定义函数
def mye( level ):if level < 1:raise Exception,"Invalid level!"# 触发异常后,后面的代码就不会再执行
try:mye(0)            # 触发异常
except Exception,err:print 1,err
else:print 2

执行以上代码,输出结果为:
$ python test.py 
1 Invalid level!

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

咖啡的味道

转自http://bbs.21our.com/main.asp一直就这样的静静的呆着&#xff0c;看着人来人往&#xff0c;听着笑语悲歌&#xff0c;却什么也不想说&#xff0c;什么也不想做。  下午有段时间&#xff0c;莫名其妙的烦躁起来&#xff0c;脑袋绷的紧紧的&#xff0c;甚至有种要窒息的感…

技术专栏 | 两万字深度长文!从原理到趋势 解剖风口上的区块链技术

来源&#xff1a;芯师爷概要&#xff1a;区块链不是一项新技术&#xff0c;而是一个新的技术组合。其关键技术包括P2P动态组网、基于密码学的共享账本、共识机制、智能合约等技术。区块链不是一项新技术&#xff0c;而是一个新的技术组合。其关键技术包括P2P动态组网、基于密码…

C++学习之路 | PTA乙级—— 1012 数字分类 (20分)(精简)

1012 数字分类 (20分) 给定一系列正整数&#xff0c;请按要求对数字进行分类&#xff0c;并输出以下 5 个数字&#xff1a; A ​1 ​​ 能被 5 整除的数字中所有偶数的和&#xff1b; A ​2 ​​ 将被 5 除后余 1 的数字按给出顺序进行交错求和&#xff0c;即计算 n ​1 ​​…

Replace Error Code with Exception(以异常取代错误码)

某个函数返回一个特定的代码&#xff0c;用来表示某种错误情况 public int withdraw(int amount) {if (amount > balance) {return -1;} else {balance - amount;return 0;} } 重构&#xff1a;改用异常 public int withdraw(int amount) {if (amount > balance) {thr…

Python 进阶

​Python 进阶&#xff1a;https://eastlakeside.gitbook.io/interpy-zh/ Python 经典教程 专题 系列&#xff1a;https://www.jb51.net/Special/520.htm Python 黑魔法指南&#xff1a;https://magic.iswbm.com/ Python 中文指南&#xff1a;https://python.iswbm.com/ Python…

太闷了,换个样子!

真的很闷&#xff0c;Blog换个样子&#xff0c;以前的黑色&#xff0c;太沉闷了&#xff01; 转载于:https://www.cnblogs.com/lovenets/archive/2006/11/18/564736.html

2018年中国65家机器人产业园布局与规划汇总盘点

来源&#xff1a;机器人创新生态概要&#xff1a;“机器人换人”大潮下&#xff0c;中国已连续两年坐上世界机器人最大消费国的宝座&#xff0c;根据国际机器人联合会&#xff08;IFR&#xff09;发布的数据&#xff0c;2016年中国工业机器人的销量为9万台&#xff0c;同比增长…

C++学习之路 | PTA乙级—— 1013 数素数 (20分)(精简)

1013 数素数 (20分) 令 P ​i ​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10 ​4 ​​ &#xff0c;请输出 P ​M ​​ 到 P ​N ​​ 的所有素数。 输入格式&#xff1a; 输入在一行中给出 M 和 N&#xff0c;其间以空格分隔。 输出格式&#xff1a; 输出从 P ​M ​​…

Replace Exception with Test(以测试取代异常)

面对一个可以预先检查的条件&#xff0c;却抛出了一个异常 public double getValueForPeriod(int periodNumber) {try {return values[periodNumber];} catch (ArrayIndexOutOfBoundsException e) {return 0;} } 重构&#xff1a;调用函数之前先做检查 public double getVal…

(转)一段挺好的领导者应该记得的话

(转)一段挺好的领导者应该记得的话 在一个BLOG上看到的,一段挺好的话&#xff0c;适合于做团队领导者的人记得真心诚意&#xff0c;以情感人&#xff1b;推心置腹&#xff0c;以诚待人开诚布公&#xff0c;以理服人&#xff1b;言行一致&#xff0c;以信取人令行禁止&#xff0…

人工智能与经济学:关于近期文献的一个综述

来源&#xff1a;财新网概要&#xff1a;相比于之前的历次技术进步&#xff0c;“人工智能革命”所引发的冲击更为巨大&#xff0c;其对经济学造成的影响也将更为广泛和深远。人工智能技术的突飞猛进&#xff0c;对经济社会的各个领域都产生了重大影响&#xff0c;这种影响当然…

C++学习之路 | PTA乙级—— 1014 福尔摩斯的约会 (20分)(精简)

1014 福尔摩斯的约会 (20分) 大侦探福尔摩斯接到一张奇怪的字条&#xff1a;我们约会吧&#xff01; 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了&#xff0c;字条上奇怪的乱码实际上就是约会的时间星期四 14:04&#xff0c;因为前面…

Pull Up Field(字段上移)

两个子类拥有形同的字段 重构&#xff1a;将该字段移至超类

gsdf

gsdfgsdgsdg转载于:https://www.cnblogs.com/lulei/archive/2006/12/01/579166.html

C++学习之路 | PTA乙级—— 1015 德才论 (25分)(精简)

1015 德才论 (25分) 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”&#xff1a;“是故才德全尽谓之圣人&#xff0c;才德兼亡谓之愚人&#xff0c;德胜才谓之君子&#xff0c;才胜德谓之小人。凡取人之术&#xff0c;苟不得圣人&#xff0c;君子而与之&#xff0c;…

DeepMind推出分布式深度强化学习架构IMPALA,让一个Agent学会多种技能

维金 编译自 DeepMind Blog量子位 出品 | 公众号 QbitAI目前&#xff0c;深度增强学习&#xff08;DeepRL&#xff09;技术在多种任务中都大获成功&#xff0c;无论是机器人的持续控制问题&#xff0c;还是掌握围棋和雅达利的电子游戏。不过&#xff0c;这些方面的进展仅限于孤…

JSR 303 - Bean Validation与Hibernate Validation 介绍

一、介绍 在应用程序中&#xff0c;通过使用 Bean Validation 或是你自己定义的 constraint&#xff0c;例如 NotNull, Max, ZipCode&#xff0c; 就可以确保数据模型&#xff08;JavaBean&#xff09;的正确性。constraint 可以附加到字段&#xff0c;getter 方法&#xff0c;…

[导入]韩语基本会话

韩语基本会话韩语原文 读法中文谐音中文翻译 네.(예.) Ne.(ye.)呢/也 是 아니오 Anio啊里哟 不是 여보세요 Yeoboseyo哟而波塞哟 喂 안녕하세요 Annyeong-haseyo安泥哈塞哟 你好 안녕히 계세요 Annyong-hi gyeseyo安泥黑给塞哟 再见 안녕히 가세요 Annyeong-hi gaseyo安泥黑卡…

AAAI2018正式落幕 13个世界顶尖AI教授都讲了啥?

来源&#xff1a;智东西概要&#xff1a;2月8日消息&#xff0c;第32届AAAI大会在美国新奥尔良正式闭幕。2月8日消息&#xff0c;第32届AAAI大会在美国新奥尔良正式闭幕。本次大会不仅颁发了最佳论文奖、最佳学生论文奖、经典论文将等一系列奖项。作为顶级学术会议之一&#xf…

C++学习之路 | PTA乙级—— 1016 部分A+B (15分)(精简)

1016 部分AB (15分) 正整数 A 的“D ​A ​​ &#xff08;为 1 位整数&#xff09;部分”定义为由 A 中所有 D ​A ​​ 组成的新整数 P ​A ​​ 。例如&#xff1a;给定 A3862767&#xff0c;D ​A ​​ 6&#xff0c;则 A 的“6 部分”P ​A ​​ 是 66&#xff0c;因为 A…