Python 3 入门手札(10)异常处理

Python 一开始执行程序时,会先全面检查语法,如果语法错误,就会停止执行,此时必须修正语法,然后重新执行。如果语法没有错误,但在执行过程中发生系统无法处理的错误,此时系统会产生一个异常(Exception),如果此异常没有被处理,那么就会一层层往上送给呼叫它的程序,直到有程序出面处理为止。如果送到最上层都没有被处理,那么就会终止程序的执行并显示错误讯息。例如:

在这里插入图片描述

为了避免程序因发生异常而被终止,我们可以在有可能出错的地方,用 try 来捕捉异常并加以处理。其基本语法如下:

try:
    # 可能发生异常的区块
except:
    # 异常处理区块    

当 try 区块中的程序发生异常时,就会直接跳到 except 区块去进行处理。例如:

s = 'a'
try:
    i = int(s)
    print('没发生异常')
except:
    print('发生异常')
print('程序结束')

当执行到 int(s) 时,因为 s 不是整数的字符串,所以会发生 ValueError 异常,然后直接跳到 except 区块。

捕捉特定的异常

我们也可以用:

except 特定异常类型 as 变量名称 :

来捕捉特定的异常类型,并用 as 后的变量名称来取得异常的讯息。若不需要可以省略。

except 可以补捉多种异常类型,例如底下的程序检查了 ValueError、ZeroDivisonError 以及二者之外的其他错误。

while True:
    s = input('请输入 100 的除数:')
    try:
        i = 100 / float(s)
        print('100 除', s, '=', i)
        break
    except ValueError as ex:   # 捕捉值错误的异常,并将异常存到 ex
        print('发生 ValueError 异常:', ex)  # 查看 ex 的内容
    except ZeroDivisionError:  #捕捉零除的异常
        print('发生 ZeroDivisionError 异常')
    except:
        print('其他异常')

以上空的 except 要放在所有 except 的最后面,表示如果前面几个都没捕捉到,就在此处理。

如果空的 except 要用变量获得错误讯息,可以改成『except BaseException as ex:』,其中 BaseException 代表通用异常。

也可以将多个异常放在 tuple 中来一次捕捉,例如:『except (ValueError, NameError) as ex:』。

try … except … else … finally …

在 try… except … 的后面还可再加上 else … 和 finally …,else 区块表示未发生异常时才执行的区块。而 finally 则是无论是否发生异常,最后都会执行的收尾区块。

while True:
    s = input('请输入 100 的除数:')
    try:
        i = 100 / float(s)
    except ValueError as ex:   # 捕捉值错误的异常,并将异常存到 ex
        print('发生 ValueError 异常:', ex)  # 查看 ex 的内容
    except ZeroDivisionError:  #捕捉零除的异常
        print('发生 ZeroDivisionError 异常')
    except:
        print('其他异常')
    else:
        print('100 除', s, '=', i)
        break
    finally:
        print('你的输入是:', s)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值