Как вызвать исключение, если входная строка не задана - PullRequest
0 голосов
/ 30 октября 2019

Что касается заголовка, я пытаюсь проверить, является ли входная строка «белой» или «черной», если не возникает исключение.

Я придумал следующее:

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

Где ошибка?

Ответы [ 5 ]

4 голосов
/ 30 октября 2019

Ваша проблема в if colour is not 'white' or colour is not 'black':

is для проверки идентичности, в то время как == для проверки на равенство. Используйте is, если вы хотите сравнить два объектачтобы увидеть, если они один и тот же объект;используйте ==, если хотите вместо этого сравнить их значения.

if colour is not white вернет true, если colour не является буквально строкой объекта 'white'. if colour != 'white' сравнивает значения вместо этого, и это то, что вы хотите использовать здесь.

(Также обратите внимание, что вы должны использовать and вместо or - строка не может быть 'black'и 'white' одновременно.)

2 голосов
/ 30 октября 2019

Изменить строку

if colour is not 'white' or colour is not 'black':

до

if colour != 'white' and colour != 'black':
2 голосов
/ 30 октября 2019

colour всегда будет либо не 'white', либо не 'black'. Вы должны использовать оператор and вместо or. Также обратите внимание, что оператор is not предназначен для проверки личности. Чтобы проверить неравенство значений, вы должны использовать вместо этого оператор !=:

if colour != 'white' and colour != 'black':
1 голос
/ 30 октября 2019

Вы должны заменить:

if colour is not 'white' or colour is not 'black':

на:

if colour.lower() not in ['white', 'black'] :
1 голос
/ 30 октября 2019

Это всегда будет правдой, цвет не может быть одновременно черно-белым, вы можете просто использовать in

if colour not in ['white', 'black']:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...