千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > python的错误和异常

python的错误和异常

来源:千锋教育
发布人:xqq
时间: 2023-11-07 19:01:35 1699354895

python至少有2类不同的错误:语法错误(SyntaxErrors)和异常(Exceptions)。

1语法错误

这个单词应该还是很有必要认识的,呵呵,语法错误,也叫解析错误,是我们最不愿意发生的错误,直接拿官网的例子:

>>>whileTrueprint'Helloworld'

File"",line1,in?

whileTrueprint'Helloworld'

^

SyntaxError:invalidsyntax

语法错误提示时会先打印出现语法的语句然后在这语句中打上‘^’表示离语法错误最近的地方。例子中就是在print前少了引号(这是一个死循环~~):

>>>whileTrue:print'Helloworld'

...

Helloworld

2异常

一个语句或者一个表达式即使编译时是没有语法错误的,但是也有可能在执行时出现问题,这种问题也叫异常(非致命性),异常通常都是有在程序中进行处理的。异常是有不同类型的,常见的异常类型有ZeroDivisionError,NameErrorandTypeError,这类异常称为标准异常,是在build-in里面定义的,可以查看Built-inExceptions。还有一类异常是用户自定义的。

>>>10*(1/0)

Traceback(mostrecentcalllast):

File"",line1,in?

ZeroDivisionError:integerdivisionormodulobyzero>>>'2'+2

Traceback(mostrecentcalllast):

File"",line1,in?

TypeError:cannotconcatenate'str'and'int'objects

3处理异常

直接给一个比较全的异常处理的例子:打开一个txt文档,读入第一行的数据,转换成int数据类型,如果都成功,就打印txt总共有多少行,最后关闭文档。

try:

f=open('test.txt','r+')

s=f.readline()

i=int(s.strip())

exceptIOErrorase:

print'I/Oerror({0}):{1}'.format(e.errno,e.strerror)

exceptValueError:

print"couldnotconvertdatatointeger"

except:

print"unexpectederror:",sys.exc_info()[0]

else:

print'therehas{0}linesinthefile'.format(len(f.readlines()))

finally:

print'endofthefunction'

f.close()

try语句处理异常,是这样做的:

A.首选,try子语句(try和except关键字之间的语句)会被执行。

B.如果没有异常发生,except子句被略过。

C.如果有异常发生,try后面的其他语句就被跳过了,如果异常类型在except关键字后匹配,这个except子句被执行。

D.如果没有异常发生,else子句就会被执行。else的作用是它避免了捕获未保护的代码所发起的异常。

E.finally子语会在try子句执行完毕之前执行,不管是否发生或者不发生异常。当一个异常发生在try子句中却未被处理时(或者发生在except或者else子句中时),finally子句执行完后会再次抛出异常。

这些基本的语法,应该也基本都是比较清楚的,文档里列出了一些需要注意的地方:

第一:一次性处理多个异常时,多个异常需要用括号括起来。

except(RuntimeError,TypeError):这样是正确的;exceptRuntimeError,TypeError:写法是错误的,因为exceptValueError,e在语法上等价于exceptValueErrorase。

第二:最后一个except子句可以不带异常类型名,这样就可以捕获任何未被定义的异常。

第三:当一个异常发生时,可能它还有一些异常的参数。except语句的异常名字后面可以跟一个参数,这个参数会跟异常实例绑定,存储在instance.args中,如果异常中__str__()定义过了,就可以直接打印出参数了。

>>>try:

...raiseException('spam','eggs')

...exceptExceptionasinst:

...printtype(inst)#theexceptioninstance

...printinst.args#argumentsstoredin.args

...printinst#__str__allowsargstobeprinteddirectly

...x,y=inst.args

...print'x=',x

...print'y=',y

...

('spam','eggs')

('spam','eggs')

x=spam

y=eggs

4用户自定义异常

用户自定义的异常需要继承Exception类,官网例子如下:

>>>classMyError(Exception):

...def__init__(self,value):

...self.value=value

...def__str__(self):

...returnrepr(self.value)

...

>>>try:

...raiseMyError(2*2)

...exceptMyErrorase:

...print'Myexceptionoccurred,value:',e.value

...

Myexceptionoccurred,value:4

>>>raiseMyError('oops!')

Traceback(mostrecentcalllast):

File"",line1,in?

__main__.MyError:'oops!'

在这个例子中,init方法被重写了,用于创建一个新的成员变量value。

5已定义好的清理行为

当不再需要这个对象的时候,有一些对象已经定义好了标准的清理行为,不管使用这个对象操作成功或者失败;常见的例子还是打开文档:

forlineinopen("myfile.txt"):

printline,

这段代码的问题是在这段代码执行后,文档处于open的状态时间是不确定的,在一个小的脚本里,这不会是一个很严重的问题,但是如果是一个大应用程序中的一部分,这个问题就会被放大。使用with语句,就允许一些像files的类在使用完后能被清理完(释放某些资源吧,我是这样理解的):

withopen("myfile.txt")asf:

forlineinf:

printline,

换成这行代码后,f已经处于close状态了。即使在读文件里的每一行遇到错误,也会关闭掉。

以上内容为大家介绍了python的错误和异常,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。

tags: python培训
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT