python之异常处理机制
以下有一串猜拳代码,玩家输入1~3 可以与电脑进行猜拳
import random while True: player = int(input('输入出拳(石头1,剪刀2,布3):')) computer = random.randint(1, 3) if player == 1: p_jieguo = '石头' elif player == 2: p_jieguo = '剪刀' else: p_jieguo = '布' if computer == 1: c_jieguo = '石头' elif computer == 2: c_jieguo = '剪刀' else: c_jieguo = '布' print(f'玩家出的是{p_jieguo},电脑出的是{c_jieguo}') if (player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1): print('玩家赢了,电脑输了') elif player == computer: print('这次是平局!') else: print('玩家输了,电脑赢了') break
我们可以看到,虽然我们可以使用 int(input()) 去转化输入的数字字符串为整数,但是我们却对 其他字符串以及不是1~3 的数 毫无办法
这个时候我们可以运用 try except 结合条件判断 或者断言 构建一个 异常处理机制
例如 使用 条件判断+raise
try: player = int(input('输入出拳(石头1,剪刀2,布3):')) # 判断不是想要的值时使用raise拉起参数错误 if player<0 or player>3: raise ValueError continue except ValueError: print('参数错误了')
可以看到 在进行合法输入后,做一个if 条件判断 当这个数字不是1~3时 使用 raise 去拉起一个参数错误的error,然后使用continue跳过当前循环进行下一轮的输入
如果是输入abcd这样的字符串就无法转换为int类型 程序会自动报出参数错误,这个时候就会print出我们提前设置好的语句
又或者是使用 assert断言
try: player = int(input('输入出拳(石头1,剪刀2,布3):')) assert 0 < player < 4 except ValueError: print('请输入数字') continue except AssertionError: print('请输入1~3') continue
加入后全文代码如下
import random while True: try: player = int(input('输入出拳(石头1,剪刀2,布3):')) assert 0 < player < 4 except ValueError: print('请输入数字') continue except AssertionError: print('请输入1~3') continue computer = random.randint(1, 3) if player == 1: p_jieguo = '石头' elif player == 2: p_jieguo = '剪刀' else: p_jieguo = '布' if computer == 1: c_jieguo = '石头' elif computer == 2: c_jieguo = '剪刀' else: c_jieguo = '布' print(f'玩家出的是{p_jieguo},电脑出的是{c_jieguo}') if (player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1): print('玩家赢了,电脑输了') elif player == computer: print('这次是平局!') else: print('玩家输了,电脑赢了') break
在输入后使用断言进行判断,可以抛出两种信息,一个是断言失败的信息,就是提示在数字范围之外
还有一个就是参数错误的信息。 这样相比于前一种 能提供更多的异常信息。
目前笔者也在学习中,暂时就分享这两种方法。据了解还有自定义error这样的东西,应该是可以结合raise去做出更多的信息反哺。

浙公网安备 33010602011771号