异常处理


异常处理程序常规语法

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结构只是将一段语句中的异常捕捉到然后抛出来,但是不影响程序体本身其他的部分的执行动作

原文地址:https://www.cnblogs.com/kindnull/p/6826105.html