python except e中的e是什么意思

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 72, 距离下一级还需 128 积分
论坛徽章:0
正在看书........看到 try...except 结构中,except 支持同时处理多个异常,其具体语法为:
except (Exc1[, Exc2[, ... ExcN]])[, reason]:
& && && & ........................
有一点迷惑,最后那个可选参数 reason 不知道是什么,怎么用,书上也没解释就过去了。
于是想查查相关文档,了解一下这家伙的用法。倒霉的是,用了 help() 没用,查找 Python Library Reference 也没找到相关说明(可能藏得太深,自己不知道在哪里找),最后干脆没有办法获得 except 的用法说明。
其实想要说的是,在 python 中如果遇到不知道如何使用的函数、模块等等时,要如何寻求帮助呢?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
家境小康, 积分 1891, 距离下一级还需 109 积分
论坛徽章:0
关于reason参考一下这篇文章
对于函数和模块,最好还是要参考手册,当然Google也是必要的……
大富大贵, 积分 11216, 距离下一级还需 8784 积分
论坛徽章:11
参考Python Documentation:
函数,类,模块找Library Reference&&
语法问题(比如你说的try ... except)找Language Reference
白手起家, 积分 72, 距离下一级还需 128 积分
论坛徽章:0
谢谢以上两位,reason 的说明已找到了。
归根结蒂,还是要说 python 文档不大健全
稍有积蓄, 积分 455, 距离下一级还需 45 积分
论坛徽章:0
核心编程上的吧,我觉得这个reason用的不对,《Language Reference》上用的是target这个单词,和with好像没啥关系吧
富足长乐, 积分 6606, 距离下一级还需 1394 积分
论坛徽章:0
...& &&&a=10/0
...& &&&print b
... except NameError,e:
...& &&&print e
... except ZeroDivisionError,e:
...& &&&print '22:',e
注意缩进。这里有俩个异常,一个是除数为0,一个是b变量没定义。
稍有积蓄, 积分 365, 距离下一级还需 135 积分
论坛徽章:0
以前学 perl 的时候, 它的 doc 组织的相当好, 查找起来很方便. 改学 python 之后, 虽然官方的 doc 内容很多, 但是发现不好查找, 你有一个 question, 不知道从哪个 link 点进去才能找到为什么“except:pass”是一个不好的Python编程习惯?_教育指南_百度教育攻略
翻译自StackOverflow中一个关于Python异常处理的问答。问题:为什么“except:pass”是一个不好的编程习惯?我时常在StackOverflow上看到有人评论关于except: pass的使用,他们都提到这是一个不好的Python编程习惯,应该避免。可我想知道为什么?有时候我并不在意出现的错误,而是只想让我的程序继续进行下去。就像这样:精彩内容,尽在百度攻略:为什么这么使用except:pass不好?这背后的原因是什么,是不是因为这样我会放掉一些本该被处理的错误?还是这样我会捕获到所有类型的错误?最佳回答:正如你所猜测的那样,这么做的确有两个不好的地方。首先,因为没有指定任何异常类型,所以会捕获到任何类型的错误。其次,捕获到错误之后只会简单地让它通过而不是采取必要的处理措施。精彩内容,尽在百度攻略:我接下来的解释或许会有点长,所以将重点总结如下: 1. 不要将任意类型的错误作为捕获对象。必须明确你想要捕获的错误类型,并且写明只捕获它们。 2. 不要试图简单地敷衍错误处理动作。除非这么做是有目的的,但这通常都不太好。那么接下来让我们更深入一些:不要将任意异常作为捕获目标当在代码中的某个地方使用异常捕获语句块时,你通常知道这个地方可能会抛出异常,并且你也知道这个地方可能会发生什么样的问题进而抛出何种异常,一旦异常被抛出,你将捕获到这个异常并使程序回到正轨上来。这就意味着你一定对这种异常有所准备,并能够在它发生的时候及时采取措施进行处理。精彩内容,尽在百度攻略:举个例子,你需要用户输入一个数字,并且使用int()函数将用户输入的字符串转换为整数类型,这时候你一定会想到如果输入的字符串并不是数字,那么就会发生值错误(ValueError)。如果真的发生了错误,那么你可以通过简单的让用户重新输入来让程序回到正轨,所以捕获值错误以及促使用户重新输入就是一个比较合理的处理策略。再举一个例子,如果你想从一个文件中读取配置信息,但正巧这个文件不存在。那么因为这是一个配置文件,如果它不存在你会返回一些默认的配置选项,所以这个文件就不是这么必要了。在这个例子中,捕获文件未找到错误(FileNotFoundError)以及返回默认配置项则是一个比较合适的处理策略。通过以上两个例子可以看到,我们都是在等待捕获特定的错误,并且针对每种错误都有特定的处理策略。然而,如果我们在这里捕获所有的异常,那么为特定异常准备的那些处理策略就会因为遇到非正常类型的异常而失效,这将会使得正常的程序流程中断并且无法恢复。让我们还是举配置文件的那个例子。正常的处理策略是如果发现文件并不存在,我们将使用默认的配置项,并可能在稍后决定是否将当前的配置项自动保存为配置文件(这样的话下一次文件就肯定存在了)。现在让我们假定我们捕获到了一个IsADirectoryError或是PermissionError错误,在这种情况下,我们可能不想让程序继续执行,我们仍然能够使用默认的配置参数,但是随后我们就不能保存文件了。也有可能用户希望使用自定义的配置项,所以这样的话就不能使用默认配置项了。所以我们这时候可能需要立即告知用户并停止当前程序。也有可能我们并不想在这么一小块代码中做这么多的事情,而是让应用层面的部分去关心它,所以我们也可能让这个错误浮到顶层,让顶层的业务逻辑去处理。精彩内容,尽在百度攻略:在Python 2 idioms document文档中也提到了一个简单的例子:如果在我们的代码中出现了一个简单的拼写错误而导致程序错误。在这种情况下因为我们捕获所有的异常,所以我们将会捕获到名称错误(NameErrors)以及语法错误(SyntaxErrors)。两者都是常见的错误,并且两者都是不希望出现在我们最终代码中的。但是因为我们什么异常都逮,当异常发生时我们将无法区分具体的错误类型并且无法进行调试。但是也存在这样一些并未预先准备的危险异常,诸如系统错误(SystemError)就很少发生以至于我们根本没有准备;这些异常通常需要更复杂的处理操作,这些操作通常可能会要求我们停止当前的工作。在任何情况下,通过局部代码实现对所有异常的处理基本上都是不可能的,所以你应该有针对性的去处理那些经过准备的特定异常。有些人曾建议至少应该明确指明基本异常(Exception)这样的不包含诸如系统退出(SystemExit)和键盘中断(KeyboardInterrupt)这样设计用来终止应用程序的异常。但是我想说这样还是不够明确,并且我个人认为只有在一个地方才能仅仅只捕获Exception或是任何类型的异常,那就是一个单独的,应用程序层面的异常捕获器,并且这个捕获器唯一的任务就是去捕获任何可能出现的未经准备的漏网异常。这样的话我们仍然能够保留意外发生异常的相关信息作为进一步的代码扩展的依据(让然如果我们能让程序恢复的话),这样下一次我们就能够把这个异常在合适的地方显式地指定出来或是指导我们撰写测试用例以保证错误不再发生(当然了,这一切还是要当我们对特定异常有所准备时,没有准备的异常还是会溜掉)。精彩内容,尽在百度攻略:在异常处理的逻辑中,不要什么都不做当显式地捕获到有限的几个异常之后,很多时候我们的确不需要做什么特别的处理。这种情况下,except SomeSpecificException: pass这么做是可以的。但是大多数情况下,我们还是需要一些与错误恢复相关的代码,例如重复尝试的动作以及设置默认值。同时也考虑到其它情况,例如如果我们的代码结构已经确定了必须不断尝试直到成功才能继续,那么什么也不做就已经够了。具体来说,我们需要用户输入一个数字,因为我们知道用户可能不会按照我们设计的那样做,所以我们会将这个部分放入一个循环,比如像这样:精彩内容,尽在百度攻略:因为我们会不断让用户输入直到没有异常抛出为止,这种情况下我们就不需要在except块中做其他任何特别的操作,这样就够了。当然了,有人会说你至少应该让用户得到一些错误信息以明确他们为什么在此被反复地要求输入。在其他一些情况下,except块中的passing语句显示了我们并没有真正的对异常做好准备。除非是一些简单的异常(诸如值错误ValueError或类型错误TypeError)我们都应该做一些操作,原因也很明显,避免简单的passing。如果真没什么可做的(如果你真的确定),那么考虑加一些解释性的注释在此;否则,请扩展except块添加一些恢复性的代码。except: pass精彩内容,尽在百度攻略:最不能容忍的就是两者的结合了。这意味着我们自愿捕获任何异常(包括那些我们没有准备的)并且对它们视而不见。你应该至少在日志中记录一下这个错误并且向上提出来终止当前程序(我就不信出现MemoryError你的程序依然能正常运行)。放过这些异常将会使程序在错误的轨道上继续运行下去并且丢掉了关键的错误信息从而使得错误不易被发现,特别是当不是你亲自遇到它的时候。所以,底线是去捕获那些经过准备的特定异常;其他发生的异常要么是等着你去修复的错误,要么是你无法处理的。当真的没有什么可做的时候放过某些特定异常是可以的,其他情况如果这么做就只能被认为是怠工或偷懒了。你的确应该去处理这些异常的。2166人阅读
Python基础知识(17)
首先我们打开一个不存在的文件:
fp = open(&null.txt&,&r&)
然后提示报错如下:
---------------------------------------------------------------------------
Traceback (most recent call last)
&ipython-input-3-fe& in &module&()
----& 1 fp = open(&null.txt&,&r&)
IOError: [Errno 2] No such file or directory: 'null.txt'
接着我们使用try...except...来执行这条语句
In [4]: try:
fp = open(&null.txt&,&r&)
...: except:
print &open error&
open error
接着我们再在后面加一条finally语句,所谓的filally就是最后要执行的,它不管你前边是否发送错误
In [4]: try:
fp =open('null.txt','r')
...: except:
print 'opoen error'
...: finally:
print 'end'
opoen error
接着我们使用except打印出错误类型,然后观察错误的type
In [5]: try:
fp = open('null.txt','r')
...: except Exception,e:
print type(e)
[Errno 2] No such file or directory: 'null.txt'
&type 'exceptions.IOError'&
我们可以看到except把错误捕捉到赋值给e,然后将其打印出,可以看到为IOError,所以在这里我们可以修改上边为:
In [9]: try:
fp = open('null.txt', 'r')
...: except IOError,e:
print &ioerror&
当然这里如果不是IOError的话,上边except语句是捕捉不到的,例如:
In [10]: try:
....: except IOError,e:
print &ioerror&
---------------------------------------------------------------------------
ZeroDivisionError
Traceback (most recent call last)
&ipython-input-10-e17eff88239d& in &module&()
3 except IOError,e:
print &ioerror&
ZeroDivisionError: integer division or modulo by zero
这时我们需要另外的错误类型进行捕获,例如:
In [11]: try:
....: except IOError,e:
print &IOError&
....: except ZeroDivisionError,e:
print &Zero Error&
Zero Error
可以看到第一个except并没有捕捉到错误,所以传给下一个except,当然如果所有的except都没有捕获到的话,程序就会抛出异常
在这里我们不得不注意的是,python的错误类型其实都是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。比如:In [14]: try:
....: except StandardError,e:
print 'standardError'
....: except ZeroDivisionError,e:
print 'zero error'
standardError
第二个except永远也捕获不到ValueError,因为ZeroDivisionError是StandardError的子类,如果有,也被第一个except给捕获了。
使用try...except...finally的另外一个好处是,可以跨越多层调用,例如:
In [15]: def foo(m):
return 10/int(m)
In [16]: def goo():
In [17]: def main():
In [18]: try:
....: except Exception,e:
integer division or modulo by zero
在foo()函数中抛出的错误,然而在goo和main函数中都没有进行捕捉,在执行main函数时进行捕获,也可以捕获到
除了try...except...finally之外还有python的logging模块,也可以进行错误调试,当然我们也可以使用raise抛出异常
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
&扫一扫,关注我
访问:657946次
积分:8599
积分:8599
排名:第2200名
原创:211篇
转载:22篇
评论:246条
姓名:Thinkgamer
主攻:云计算/python/数据分析
程度:熟悉/熟悉/熟悉
工作状态:在职ing
心灵鸡汤:只要努力,你就是下一个大牛...
hadoop/spark/机器学习群:(大神建的群,蹭个管理员)
欢迎骚扰........
阅读:19420
文章:18篇
阅读:69989
文章:11篇
阅读:34447
阅读:32682
文章:15篇
阅读:28139
(4)(3)(8)(2)(1)(6)(7)(10)(12)(10)(8)(9)(18)(15)(7)(2)(5)(18)(10)(10)(29)(17)(4)(5)(1)(8)(1)(1)(4)& & & &看下面这个函数
& & & &def test():
if __name__ == '__main__':
test()& & & &除0肯定是不对的,会引发一个except,内容如下:
& & & &File &E:\Src\dongsheng\TestPython\testtrace_back.py&, line 23, in &module&
File &E:\Src\dongsheng\TestPython\testtrace_back.py&, line 19, in test
ZeroDivisionError: integer division or modulo by zero
& & & &上面的提示,是在IDE中运行时出现的,实际在线上运行脚本时,一般会用nohup 方式启动,输出内容会写入到nohup.out文件中,但这个文件里的内容可能非常多,很杂乱,不利于异常的排查。
& & & & python &提供了traceback &,可以完美的输出except发生时的信息,就和上面的内容一样,而且可以输入到指定的文件之中,所以,不妨写一个装饰器,修饰那些需要监督的函数,当他们发生异常时,记录下有关异常的信息。
& & & &#coding=utf-8
from functools import wraps
import traceback
def except_trace(filename):
def decorate(func):
@wraps(func)
def wrapper(*args,**kwargs):
func(*args,**kwargs)
fp = open(filename,'w')
traceback.print_exc(file=fp)
fp.close()
return wrapper
return decorate
@except_trace('1.txt')
def test():
if __name__ == '__main__':
& & & & &这一次,发生异常后,有关异常的信息会输入到1.txt文件中,这个文件中只包含异常的信息,方便查看。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:167938次
积分:3137
积分:3137
排名:第10766名
原创:150篇
评论:19条
(1)(1)(2)(1)(4)(6)(11)(2)(2)(17)(3)(4)(11)(8)(10)(5)(3)(2)(2)(5)(19)(1)(3)(2)(9)(1)(1)(1)(3)(6)(5)(1)(Python)异常处理try...except、raise - 我是爱哭鬼 - 博客园
评论 - 212
一、try...except
有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError
print "done"
运行结果:
Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in &module&
c=a/bZeroDivisionError: integer division or modulo by zero
我们发现程序因为ZeroDivisionError而中断了,语句print "done" 没有运行。为了处理异常,我们使用try...except,更改代码:
except ZeroDivisionError,e:
print e.message
print "done"
运行结果:
integer division or modulo by zerodone
这样程序就不会因为异常而中断,从而print "done"语句正常执行。
我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except
处理一组异常可以这样写(其中e代表异常的实例):
except (IOError ,ZeroDivisionError),e:
try ....except...else 语句,当没有异常发生时,else中的语句将会被执行。
except (IOError ,ZeroDivisionError),x:
print "no error"
print "done"
运行结果:
0no errordone
二、raise 引发一个异常
例子:如果输入的数据不是整数,则引发一个ValueError
inputValue=input("please input a int data :")
if type(inputValue)!=type(1):
raise ValueError
print inputValue
假设输入1.2,运行结果为:
please input a int data :1.2Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in &module&
raise ValueErrorValueError
如果输入1,运行结果为:
please input a int data :11
三、try ...finally&
无论异常是否发生,在程序结束前,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/bZeroDivisionError: integer division or modulo by zero
虽然有异常发生,但在程序终止前,finally中的语句也能正常执行。。
finally语句也可以和except语句一起使用。
print "error"
print "always excute"
运行结果:
always excute
四、自定义一个异常类
自定义一个MyException类,继承Exception。
class MyException(Exception):
def __init__(self,message):
Exception.__init__(self)
self.message=message
如果输入的数字小于10,就引发一个MyException异常:
a=input("please input a num:")
raise MyException("my excepition is raised ")
except MyException,e:
print e.message
运行结果:
please input a num:1my excepition is raised
五、python所有的标准异常类:
异常名称描述
BaseException
所有异常的基类
SystemExit
解释器请求退出
KeyboardInterrupt
用户中断执行(通常是输入^C)
常规错误的基类
StopIteration
迭代器没有更多的值
GeneratorExit
生成器(generator)发生异常来通知退出
SystemExit
Python 解释器请求退出
StandardError
所有的内建标准异常的基类
ArithmeticError
所有数值计算错误的基类
FloatingPointError
浮点计算错误
OverflowError
数值运算超出最大限制
ZeroDivisionError
除(或取模)零 (所有数据类型)
AssertionError
断言语句失败
AttributeError
对象没有这个属性
没有内建输入,到达EOF 标记
EnvironmentError
操作系统错误的基类
输入/输出操作失败
操作系统错误
WindowsError
系统调用失败
ImportError
导入模块/对象失败
KeyboardInterrupt
用户中断执行(通常是输入^C)
LookupError
无效数据查询的基类
IndexError
序列中没有没有此索引(index)
映射中没有这个键
MemoryError
内存溢出错误(对于Python 解释器不是致命的)
未声明/初始化对象 (没有属性)
UnboundLocalError
访问未初始化的本地变量
ReferenceError
弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError
一般的运行时错误
NotImplementedError
尚未实现的方法
SyntaxError
Python 语法错误
IndentationError
Tab 和空格混用
SystemError
一般的解释器系统错误
对类型无效的操作
ValueError
传入无效的参数
UnicodeError
Unicode 相关的错误
UnicodeDecodeError
Unicode 解码时的错误
UnicodeEncodeError
Unicode 编码时错误
UnicodeTranslateError
Unicode 转换时错误
警告的基类
DeprecationWarning
关于被弃用的特征的警告
FutureWarning
关于构造将来语义会有改变的警告
OverflowWarning
旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning
关于特性将会被废弃的警告
RuntimeWarning
可疑的运行时行为(runtime behavior)的警告
SyntaxWarning
可疑的语法的警告
UserWarning
用户代码生成的警告
阅读(...) 评论()
Copyright & 我是爱哭鬼
Powered by:
模板提供:}

我要回帖

更多关于 python try except e 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信