异常处理程序常规语法
try:
suite1 #测试语句块
except exception1:
suite2 #如果测试语句suite1中发生exception1异常时执行
except (exception2,exception3):
suite3 #如果测试语句suite1中发生元组中任意异常时执行
except exception4 as reason: #as把异常的原因赋值给reason
suite4 #如果测试语句suite1发生exception4的异常时执行
except:
suite5 #如果测试语句suite1发生异常在所列出的异常之外时执行
else:
suite5 #如果测试语句块suite1中没有发生异常时执行
finally:
suit6 #不管测试语句suite1中又没有发生异常都会执行
注意:中间的except,else,finally都是可选的
但至少有一个,不然try就没有意义了,根据实际中的需求来选择。
try: print(1111) a = 'python' ff = open('xxx.py') print(x) print(a[10]) except (IndexError,NameError) as reason: print(reason) else: print('没发生异常') finally: print('都执行') print(222)
范例1:各种异常捕捉设置
try: print(1111) a='python' print(a[10]) print(2222) except NameError: print('没有被定义该变量') except IndexError: print('超出索引范围') else: print('没发生异常!!!') finally: print('不管上面程序有没有发生异常,该标签里的语句都会执行')
范例2:具体错误原因通过as 变量来接收,这里用变量只要不是Python内置关键字都可以随意取,我这里用字母e
try: a='python' print(a[10]) except IndexError as e: print(e)
范例3:多种报错可以整合在一起接收输出
try: a='python' print(11111) open('x') print(a[10]) print(b) except(IndexError,NameError,FileNotFoundError) as reason: print(reason)
# raise 触发异常 使用raise语句自己触发异常,换句话说就是自定义触发异常
比如自己定义的异常为InputError
raise NameError 输出内容: Traceback (most recent call last): File "D:/Python36/note/001.py", line 42, in <module> raise NameError NameError >>>
# assert断言:用来声明某个条件是真的 如果条件是假的则会抛出AssertionError异常
print('分割符############') assert 20 < 130 print('分隔符--------') assert 20 < 13 输出结果: 分割符############ 分隔符-------- Traceback (most recent call last): File "D:/Python36/note/001.py", line 44, in <module> assert 20 < 13 AssertionError >>>
从上述例子中发现,如果assert后面条件语句为真,则不输出任何内容,否则就输出 AssertionError异常
总结:
try:
程序执行体
except *Error:
print('xxxxxxx')
其他执行体pass
try结果捕捉到异常执行完except里面的语句,后面其他的执行体仍然继续执行,try结构只是将一段语句中的异常捕捉到然后抛出来,但是不影响程序体本身其他的部分的执行动作