一、 基本格式
# 示例一:importrequeststry:# 尝试进行下面操作,如果可以执行,就执行下面代码ret = requests.get('http://www.google.com') print(ret.text)exceptExceptionase:# 如果不可以执行(平时会报错),这时不会报错,执行下面代码print('请求异常')# 示例二:try: v = [] v[11111]# IndexError类型的异常exceptValueErrorase:# ValueError是一个类,继承Exception,只能捕获到ValueError类型的异常passexceptIndexErrorase:# IndexError是一个类,继承Exception,只能捕获到IndexError类型的异常passexceptExceptionase:# Exception是一个类,可以捕获到所有异常print(e)# e是Exception类的对象,存储了一个错误信息
finally
try: int('asdf')exceptExceptionase: print(e)finally: print('最后无论对错都会执行')# 特殊情况:deffunc():try: int('asdf')exceptExceptionase:return123finally: print('最后')# 无论对错,函数中遇到return,也会执行,执行完后再returnfunc()
建议:书写函数或功能时,建议用try包裹一下,避免报错
示例
# 1. 写函数,函数接受一个列表,请将列表中的元素每个都 +100deffunc(arg):result = []foriteminarg:ifitem.isdecimal(): result.append(int(item) +100)returnresult# 2. 写函数去,接受一个列表。列表中都是url,请访问每个地址并获取结果importrequestsdeffunc1(url_list):result = []try:forurlinurl_list: response = requests.get(url) result.append(response.text)exceptExceptionase:passreturnresultdeffunc2(url_list):result = []forurlinurl_list:try: response = requests.get(url) result.append(response.text)exceptExceptionase:passreturnresult# 这两个函数执行结果是不一样的,是try所处的位置不同导致的func1(['http://www.baidu.com','http://www.google.com','http://www.bing.com'])func2(['http://www.baidu.com','http://www.google.com','http://www.bing.com'])
二、 主动触发异常
try: int('123')raiseException('XXX')# 代码中主动抛出异常exceptExceptionase: print(e)# XXX
示例:
deffunc():result =Truetry:withopen('x.log',mode='r',encoding='utf-8')asf: data = f.read()if'alex'notindata:raiseException()exceptExceptionase: result =Falsereturnresult
三、 自定义异常
classMyException(Exception):# 自定义异常,继承Exceptionpasstry:raiseMyException('asdf')# 主动触发自定义异常,只有自定义异常自己和Exception能捕获到exceptMyExceptionase: print(e)
勤勤恳恳更博,点点滴滴记录; 格式小问题,望谅解; 有错误,欢迎指点!异常处理