异常捕获、raise和断言的使用
- try...except
- 工作原理是:当开始一个try语句之后,python就在当前程序的上下文中做标记,这样当异常出现时就可以回到这里,try子语句先执行,接下来会发生什么依赖于执行时是否出现异常;
- 它不是一个很好的处理异常的方式,它会捕获所有的异常,我们不能通过该程序识别出具体的异常信息
try:
xxx # 正常的代码
except xxx: # 可以写为 except(Exception1[,Exception2[,..Exception3]])
print "Error: xxx错误
# 可以写为正常的代码
else:
print xxx
# 异常捕获中嵌套的方式
try:
xxx
try:
xxx
except:
xxx
except:
xxx
else:
xxx
# 当我们捕获异常之后想要访问它的一些属性的时候,这个时候就可以使用as,
# e相当于是替代前面的错误类型,我们可以用e替代访问它的一些属性
try:
raise MyError(2*2)
except MyError as e:
print 'My exception occurred, value:', e.value
try:
xxx
finally:
xxx
raise
- raise--->自己触发异常
- 语法格式:raise [Exception [, arg [, traceback]]]
# 自定义一个函数
def mye( level ):
if level < 1:
raise Exception("Invalid level!", level)
# 触发异常后,后面的代码就不会再执行
- python中的断言assert
- 语法格式:assert expression [,arguments]/assert 表达式 [,参数]
- eg:assert experssion(参数)/assert xxx(表达式)
- 作用:用bool值来判定表达式是否成立,表达式不成立,抛出异常
# 单一表达式/多表达式
a = 10
assert a > 0 # 如果a是小于0的会报错
print('[a = 10] assert a > 0', 'ok')
assert experssion, "arguments"--->这种用法一般是要知道错误在哪
# 尝试捕获assert异常
try:
assert a < 0
except AssertionError as e: # 明确抛出此异常
# 抛出 AssertionError 不含任何信息,所以无法通过ae.__str__()获取异常描述
print('[AssertionError]', e, e.__str__())
关键字 |
关键字说明 |
raise |
抛出/引发异常 |
try/except |
捕获异常并处理 |
pass |
忽略异常 |
as |
定义异常实力(except IOError as e) |
finally |
无论是否出现异常都执行的代码 |
else |
如果try中的语句没有引发异常,则执行else中的语句 |