ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python基础第8课-错误(异常)处理:

2019-04-08 19:37:54  阅读:311  来源: 互联网

标签:错误 Python except try finally print 异常 ValueError


错误处理:

在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数 open() ,成功时返回文件描述符(就是一个整数),出错时返回 -1 。用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须用大量的代码来判断是否出错:一旦出错,还要一级一级上报,直到某个函数可以处理该错误(比如,给用户输出一个错误信息)。高级语言一般都有
错误(异常)处理机制:
try:
print('try...')
r = 10 / 0
print('result:', r)
except ZeroDivisionError as e:
print('except:', e)
finally:
print('finally...')
print('END')

当我们认为某些代码可能会出错时,就可以用 try 来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即 except 语句块,执行完 except 后,如果有 finally 语句块,则执行finally 语句块,至此,执行完毕。一般,try放你的工程代码,except放你的错误处理代码,finally放你的收尾善后代码
try:
print('try...')
r = 10 / int('a')
print('result:', r)
except ValueError as e:
print('ValueError:', e)
except ZeroDivisionError as e:
print('ZeroDivisionError:', e)
else:
print('no error!')
finally:
print('finally...')
print('END')
异常处理的逻辑:
    每异常----->结束
    有异常----->
    找异常处理的出口------> 
    找到一个出口就出,后面的不看  ------> 
    异常处理完了,收拾一下现场(比如关闭打开了的文件啊什么的)

Python 的错误其实也是 class,所有的错误类型都继承自 BaseException ,所以在使用 except 时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。比如:try:
foo()
except ValueError as e:
print('ValueError')
except UnicodeError as e:
print('UnicodeError')
第二个 except 永远也捕获不到 UnicodeError ,因为 UnicodeError 是ValueError 的子类,如果有,也被第一个 except 给捕获了。
Python 所有的错误都是从 BaseException 类派生的,所以,一般最后一个异常时BaseException的对象,确保逮住所有的异常,常见的错误类型和继承关系看这里:https://docs.python.org/3/library/exceptions.html#exception-hierarchy


抛出错误

    python有很多自带的错误(异常),也可以自己定义异常,然后再自己程序中抛出异常class FooError(BaseError):        ......
class FooError(ValueError):        ......
用raisedef foo(s):
n = int(s)if n==0:
raise FooError('invalid value: %s' % s)
return 10 / n


来自为知笔记(Wiz)




标签:错误,Python,except,try,finally,print,异常,ValueError
来源: https://www.cnblogs.com/MarmaladeCat/p/1039a7abe2a46efc58300a311599cf0c.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有