Мой код не работает должным образом с помощью функции try and кроме внутри Python 3 - PullRequest
0 голосов
/ 13 января 2019

Так что у меня странная проблема с Python, которая связана с функцией try и исключением. Предполагается, что это позволит мне повторно подключить клиента, который в данном случае является c2, так как c1 переводит средства в c2. Однако вместо сообщения о том, что пользователь отсутствует в базе данных, он выдает мне ключевую ошибку и просит заново ввести имя клиента. Второе использование try и кроме приведенного ниже кода работает, хотя есть визуальная ошибка, а не функциональная ошибка.

Я попытался сменить место, где я использую попробовать, кроме как, и попытался выполнить поиск в Интернете, но не нашел решения. Я работаю с Python всего несколько месяцев, и он включается и выключается.

elif option == 3:
            print("Option", 3)
            try:
                    c2 = input("Customer 2")
                    customer2 = BankSystem.c[c2]
            except ValueError:
                print("\n>>>An exception occured ~ invalid i/p")
                print("\t~Customer not in database")
            print()
            if "c2" in BankSystem.c: ## check for valid account id
                print(customer2)
            try:
                    amount = float(input("Amount to transfer "))
                    self.tranfer(customer2, amount)
            except ValueError:
                print("\n>>>An exception occured ~ invalid i/p")
                print("\t~Non-numeric data entered")
            else:
                print("\n>>>>>>>account:{} does not 
exist".format("c2"))
            print(self)
            print(customer2)

Ответы [ 2 ]

0 голосов
/ 13 января 2019
it gives me a keyerror

Это связано с тем, что в этой строке

customer2 = BankSystem.c[c2]

вы пытаетесь получить доступ к dict с помощью ключа c2 (предоставленного пользователем). Если такого ключа нет, KeyError произойдет. Обратите внимание, что вместо использования try-except вы можете проверить, есть ли ключ dict следующим образом:

d = {'a':1}
k = input('key:')
if k in d.keys():
    print('key present')
else:
    print('key not present')

Напечатает key present, если вы дадите ему a и key not present во всех других случаях.

0 голосов
/ 13 января 2019

Из документов: «Python вызывает KeyError всякий раз, когда запрашивается объект dict () (с использованием формата a = adict [key]), а ключ отсутствует в словаре». Таким образом, вы должны проверить наличие ключевой ошибки в вашем блоке кроме:

try:
    c2 = ....
except KeyError:
    print("\n>>>An exception occured ~ invalid i/p")
    print("\t~Customer not in database")

Edit: Вы можете реструктурировать свою попытку / кроме как:

        try:
            c2 = input("Customer 2")
            customer2 = BankSystem.c[c2]
            if "c2" in BankSystem.c: ## check for valid account id
                print(customer2)
                amount = float(input("Amount to transfer "))
                self.tranfer(customer2, amount)
            else:
                print("\n>>>>>>>account:{} does not exist".format("c2"))
            print(self)
            print(customer2)
        except KeyError:
            print("\n>>>An exception occured ~ invalid i/p")
            print("\t~Customer not in database")
        except ValueError:
            print("\n>>>An exception occured ~ invalid i/p")
            print("\t~Non-numeric data entered")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...