首页 > 解决方案 > 如果输入字符串不是给定的,如何引发异常

问题描述

根据标题,我正在尝试检查输入字符串是“白色”还是“黑色”,如果不引发异常。

我想出了以下内容:

class Player:
    def __init__(self):
        self.name = input('Enter you Name: ')
        colour = input('Now choose your army colour between "white" and "black": ')
        if colour is not 'white' or colour is not 'black':
            raise Exception('colour must be either "white" or "black"')
        else:
            self.colour = colour

    def get_name(self):
        return self.name

    def get_colour(self):
        return self.colour


player = Player()

这对我来说看起来不错,但是当我输入“白色”或“黑色”时,它无论如何都会引发异常。

C:\Users\oricc\PycharmProjects\practisingDrowing\venv\Scripts\python.exe C:/Users/oricc/PycharmProjects/practisingDrowing/canvas.py
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Enter you Name: John
Now choose your army colour between "white" and "black": white
Traceback (most recent call last):
  File "C:/Users/oricc/PycharmProjects/practisingDrowing/canvas.py", line 67, in <module>
    player = Player()
  File "C:/Users/oricc/PycharmProjects/practisingDrowing/canvas.py", line 56, in __init__
    raise Exception('colour must be either "white" or "black"')
Exception: colour must be either "white" or "black"

Process finished with exit code 1

错误在哪里?

标签: pythonexception

解决方案


你的问题在if colour is not 'white' or colour is not 'black':

is用于身份测试,而==用于平等测试。如果is您想比较两个对象以查看它们是否是同一个对象,请使用;==如果您想比较它们的值,请使用。

if colour is not white将返回 true ,除非colour字面上是对象 string 'white'if colour != 'white'而是比较值,并且是您要在此处使用的值。

(另请注意,您应该使用and而不是or- 字符串不能'black'同时'white'使用。)


推荐阅读