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去做出更多的信息反哺。

 

posted @ 2021-11-05 15:04  кто  阅读(77)  评论(0)    收藏  举报