Nonetype не повторяется при обновлении словаря?

#python #python-3.x

#python #python-3.x

Вопрос:

Я довольно новичок в Python, и в качестве проекта для самосовершенствования я решил создать простую платформу с обновляемым пользовательским словарем паролей. Эта работа все еще продолжается!Проблема возникает при создании нового идентификатора пользователя, а затем попытке получить доступ к этому идентификатору пользователя. Я использую python 3.7.

Вот ошибка: Трассировка (последний вызов last): строка 37, в учетной записи if в accounts: TypeError: аргумент типа ‘NoneType’ не может быть повторен

 import sys
accounts = {'Trace': 'Jollyrancher5', 'Brian': 'Kitties82', 'Taylor': 'Flower15'}

while True:
    print('Please select an option.n1. Create new account.n2. Enter existing account.')
    choice = input()
    if choice == '1':
        print('Please enter an account name')
        new_account = input()
        if new_account not in accounts.keys():
            print('Please enter a password.')
            new_pass = input()
            accounts = accounts.update({new_account: new_pass})
            print('Your new User ID is: '   new_account   '.')
            print('Your new password is: '   new_pass   '.')
            print('Please store this information for safe keeping.')
            print('Type OK to continue.')
            while True:
                next = input()
                if next == 'OK' or next == 'ok':
                    break
                else:
                    print('Invalid entry. Please type OK.')
        else:
            print('Account name taken. Please enter a different account name.')
    elif choice == '2':
        break
    else:
        print('Not a valid entry.')

account = ''
password = ''
denial = 0
while True:
    print('Please enter User ID.')
    account = input()
    if account in accounts:
        break
    else:
        print('User ID not recognized.')

while True:
    print('Please enter password.')
    password = input()
    if password == accounts[account]:
        break
    else:
        password != accounts[account]
        denial  = 1
        if denial == 3:
            print('Account locked.')
            input()
            sys.exit()
print('Access Granted.nYour account balance is $1,000,000.00.')
input()
  

Комментарии:

1. Строка 13 возвращает None just use accounts.update(...) not accounts = accounts.update(...)

2. accounts = accounts.update({...}) -> accounts.update({...}) .

Ответ №1:

Проблема в строке № 13:

 accounts = accounts.update({new_account: new_pass})
  

Это возвращается None по мере выполнения обновления на месте. [смотрите документы] Вместо этого используйте:

 accounts.update({new_account: new_pass})
  

Обновление будет выполнено без необходимости переназначать значение.

Комментарии:

1. Ах, так просто, как я этого не понял. Большое вам спасибо!

2. @Jab Наконец-то я получил свой значок с золотым тегом python 🙂 и 16k, наконец, тоже 🙂

Ответ №2:

Удалите эту строку:-

 `accounts = accounts.update({new_account: new_pass})`
  

добавьте эту строку:-

 `while True:
      print('Please enter User ID.')
      account = input()
      accounts.update({new_account:new_pass})
      if account in accounts:`
  

эта ошибка вызвана тем, что ваш словарь не обновлялся, и именно поэтому первым значением, которое он получал, было None, следовательно, была сгенерирована ошибка NoneType.

Поддержите, если вы поняли мой ответ.