python步调在运转中展示的特殊缺点以及处置本领

python步调在运转中展示的特殊缺点以及处置本领

python供给了两个特殊要害的功效来处置python步调在运转中展示的特殊和缺点。你不妨运用该功效来调节和测试python步调。

特殊处置: 本站Python教程会简直引见。

预言(Assertions):本站Python教程会简直引见。

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

尚未实行的本领

SyntaxError

Python 语法缺点

IndentationError

缩进缺点

TabError

Tab 和空格混用

SystemError

普遍的证明器体例缺点

TypeError

对典型失效的操纵

ValueError

传入失效的参数

UnicodeError

Unicode 关系的缺点

UnicodeDecodeError

Unicode 解码时的缺点

UnicodeEncodeError

Unicode 源代码时缺点

UnicodeTranslateError

Unicode 变换时缺点

Warning

劝告的基类

DeprecationWarning

对于被弃用的特性的劝告

FutureWarning

对于结构未来语义会有变换的劝告

OverflowWarning

旧的对于机动提高为长整型(long)的劝告

PendingDeprecationWarning

对于个性将会被废除的劝告

RuntimeWarning

疑惑的运转时动作(runtime behavior)的劝告

SyntaxWarning

疑惑的语法的劝告

UserWarning

用户代码天生的劝告

什么是特殊?

特殊即是一个事变,该事变会在步调实行进程中爆发,感化了步调的平常实行。

普遍情景下,在Python没辙平常处置步调时就会爆发一个特殊。

特殊是Python东西,表白一个缺点。

当Python剧本爆发特殊时咱们须要捕捉处置它,要不步调会中断实行。

特殊处置

捕获特殊不妨运用try/except语句。

try/except语句用来检验和测定try语句块中的缺点,进而让except语句捕捉特殊消息并处置。

即使你不想在特殊爆发时中断你的步调,只需在try里捕捉它。

语法:

以次为大略的try….except…else的语法:

try:

<语句> #运转其余代码

except <名字>:

<语句> #即使在try部份激励了'name'特殊

except <名字>,<数据>:

<语句> #即使激励了'name'特殊,赢得附加的数据

else:

<语句> #即使没有特殊爆发

try的处事道理是,当发端一个try语句后,python就在当出息序的左右文中作标志,如许当特殊出当前就不妨回到这边,try子句先实行,接下来会爆发什么依附于实行时能否展示特殊。

即使当try后的语句实行时爆发特殊,python就跳回到try并实行第一个配合该特殊的except子句,特殊处置结束,遏制流就经过所有try语句(只有在处置特殊时又激励新的特殊)。

即使在try后的语句里爆发了特殊,却没有配合的except子句,特殊将被递交到表层的try,大概到步调的最表层(如许将中断步调,并打字与印刷默许的堕落消息)。

即使在try子句实行时没有爆发特殊,python将实行else语句后的语句(即使有else的话),而后遏制流利过所有try语句。

范例

底下是大略的例子,它翻开一个文献,在该文献中的实质写入实质,且并未爆发特殊:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

try:

fh = open("testfile", "w")

fh.write("这是一个尝试文献,用来尝试特殊!!")

except IOError:

print "Error: 没有找到文献或读取文献波折"

else:

print "实质写入文献胜利"

fh.close()

之上步调输入截止:

$ python test.py

实质写入文献胜利

$ cat testfile # 察看写入的实质

这是一个尝试文献,用来尝试特殊!!

范例

底下是大略的例子,它翻开一个文献,在该文献中的实质写入实质,但文献没有写入权力,爆发了特殊:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

try:

fh = open("testfile", "w")

fh.write("这是一个尝试文献,用来尝试特殊!!")

except IOError:

print "Error: 没有找到文献或读取文献波折"

else:

print "实质写入文献胜利"

fh.close()

在实行代码前为了尝试简单,咱们不妨先去掉 testfile 文献的写权力,吩咐如次:

chmod -w testfile

再实行之上代码:

$ python test.py

Error: 没有找到文献或读取文献波折

运用except而不带任何特殊典型

你不妨不带任何特殊典型运用except,如次范例:

try:

平常的操纵

......................

except:

爆发特殊,实行这块代码

......................

else:

即使没有特殊实行这块代码

之上办法try-except语句捕捉一切爆发的特殊。但这不是一个很好的办法,咱们不许经过该步调辨别出简直的特殊消息。由于它捕捉一切的特殊。

运用except而带多种特殊典型

你也不妨运用沟通的except语句来处置多个特殊消息,如次所示:

try:

平常的操纵

......................

except(Exception1[, Exception2[,...ExceptionN]]]):

爆发之上多个特殊中的一个,实行这块代码

......................

else:

即使没有特殊实行这块代码

try-finally 语句

try-finally 语句不管能否爆发特殊都将实行结果的代码。

try:

<语句>

finally:

<语句> #退出try时总会实行

raise

范例

#!/usr/bin/python

# -*- coding: UTF-8 -*-

try:

fh = open("testfile", "w")

fh.write("这是一个尝试文献,用来尝试特殊!!")

finally:

print "Error: 没有找到文献或读取文献波折"

即使翻开的文献没有可写权力,输入如次所示:

$ python test.py

Error: 没有找到文献或读取文献波折

同样的例子也不妨写成如次办法:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

try:

fh = open("testfile", "w")

try:

fh.write("这是一个尝试文献,用来尝试特殊!!")

finally:

print "封闭文献"

fh.close()

except IOError:

print "Error: 没有找到文献或读取文献波折"

当在try块中抛出一个特殊,登时实行finally块代码。

finally块中的一切语句实行后,特殊被再次触发,并实行except块代码。

参数的实质各别于特殊。

特殊的参数

一个特殊不妨带上参数,可动作输入的特殊消息参数。

你不妨经过except语句来捕捉特殊的参数,如次所示:

try:

平常的操纵

......................

except ExceptionType, Argument:

你不妨在这输入 Argument 的值...

变量接受的特殊值常常包括在特殊的语句中。在元组的表单中变量不妨接受一个大概多个值。

元组常常包括缺点字符串,缺点数字,缺点场所。

范例

以次为单个特殊的范例:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# 设置因变量

def temp_convert(var):

try:

return int(var)

except ValueError, Argument:

print "参数没有包括数字\n", Argument

# 挪用因变量

temp_convert("xyz");

之上步调实行截止如次:

$ python test.py

参数没有包括数字

invalid literal for int() with base 10: 'xyz'

触发特殊

咱们不妨运用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!

用户自设置特殊

经过创造一个新的特殊类,步调不妨定名它们本人的特殊。特殊该当是典范的接受自Exception类,经过径直或转弯抹角的办法。

以次为与RuntimeError关系的范例,范例中创造了一个类,基类为RuntimeError,用来在特殊触发时输入更多的消息。

在try语句块中,用户自设置的特殊后实行except块语句,变量 e 是用来创造Networkerror类的范例。

class Networkerror(RuntimeError):

def __init__(self, arg):

self.args = arg

在你设置之上类后,你不妨触发该特殊,如次所示:

try:

raise Networkerror("Bad hostname")

except Networkerror,e:

print e.args

分享到 :
相关推荐

Leave a Reply

Your email address will not be published. Required fields are marked *