二哥啊

导航

 
"""
Error
逻辑错误: 算法写错 加法写成减法
笔误: 变量名写错了,语法错误
函数或类使用错误, 其实这也属于逻辑错误
错误可以避免
"""

"""
异常 Exception
意外情况
异常是可以捕获 并被处理,错误是不能捕获 错误尽可能避免


异常类的继承
BaseException

Exception是所有内建的、非系统退出的异常的基类 自定义异常应该继承它
SyntaxError 语法异常
ArithmeticError 所有算术计算引发的异常
LookupError 使用映射的键或索引的无效时引发的异常的基类:IndexError KeyError



"""
f= None

try: # 不会开辟新的作用域
f = open("te")
except:
pass
finally:
if f is not None:
f.close()

print("outer")
print(dir()) # 收集当前模块的所有信息


def foo():
try:
1/0
return 123
except:
pass
finally:
return 567
print('fin')

print("result={}".format(foo())) # 函数的返回值取决于最后一个执行的return语句

try:
1/0
except ArithmeticError:
print("Ari")
except:
print('exc')
else:
print('else')
finally:
print('fin')


"""
1.如果try中语句执行时发生异常,搜索except子句,并执行第一个匹配该异常的except子句
2.如果try中语句执行时发生异常,却没有匹配的except子句,异常将被递交到外层的try,如果外层不处理这个
异常,异常将继续想外层传递。如果都不处理该异常,则会传递到最外层,如果还没有处理,就终止
异常所在线程
3.如果try执行时没有发生异常,将执行else子句中的语句
4.无论try中是否发生异常,finally子句最终都会执行
"""
try:
f= open('test')
except: # 异常捕获交给except
pass


class MyException(Exception):
pass

try:
# 1/0
open('test')
raise MyException("My Error")
except OSError:
print("os")
except ZeroDivisionError:
print("0")
except MyException:
print("my")
except InterruptedError:
print("IN")
except:
print("exc")

finally: # 不管有没有异常 都执行 清理工作 资源释放 同上下文管理器
print("fin")

print("outer")

"""
捕获是从上到下依次比较 如果匹配 则执行匹配的excepot语句块
如果被一个except语句捕获 其他的except语句就不会再次捕获了
如果没有任何一个except语句捕获到这个异常,则异常向外抛出 本质是异常的实例

:raise后跟类名是无参构造实例
"""


posted on 2019-09-03 20:48  二哥啊  阅读(239)  评论(0编辑  收藏  举报