Python基础003--异常捕获、raise和断言的使用

异常捕获、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..finally
    • 无论是否发生异常都将执行finally后的代码
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__())

  • python中异常相关的关键字
关键字 关键字说明
raise 抛出/引发异常
try/except 捕获异常并处理
pass 忽略异常
as 定义异常实力(except IOError as e)
finally 无论是否出现异常都执行的代码
else 如果try中的语句没有引发异常,则执行else中的语句

你可能感兴趣的:(Python基础003--异常捕获、raise和断言的使用)