Не могу понять, почему я получаю UnboundLocalError - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь получить код «кроме» строки для целого числа.- «длина».Когда я ставлю, кроме ValueError, я получаю обратно «Пожалуйста, введите номер», но добавляется больше ошибок.Я также добавил, кроме UnboundLocalError, но это не похоже на работу.Пожалуйста, дайте мне знать, что я делаю не так!Вот мой код:

import random
import string


def RPG():
    try:
        RPG = ""
        count = 0
        length = int(
            input("How many characters would you like in your password? "))
    except (ValueError, UnboundLocalError):
        print("Please enter a number.")
    while count != length:
        upper = [random.choice(string.ascii_uppercase)]
        lower = [random.choice(string.ascii_lowercase)]
        num = [random.choice(string.digits)]
        symbol = [random.choice(string.punctuation)]
        everything = upper + lower + num + symbol
        RPG += random.choice(everything)
        count += 1
        continue
    if count == length:
        print(RPG)
# could also use string.printable for digits, letters, punct., and whitespace.


RPG()

Вот что я получил от использования этого кода и ввода строки вместо целого числа в длину:

How many characters would you like in your password? j
Please enter a number.
Traceback (most recent call last):
  File "c:\Users\jkelly\Desktop\python\code.py", line 28, in <module>
    pwd()
  File "c:\Users\jkelly\Desktop\python\code.py", line 14, in pwd
    while count != length:
UnboundLocalError: local variable 'length' referenced before assignment

Я ожидаю только "Пожалуйставведите число ", а не остальная часть ошибки, любая помощь будет принята с благодарностью.Спасибо за ваше время!

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Проблема с исходным кодом заключается в том, что хотя count != length всегда выполняется, независимо от части try-except.Этого можно избежать, только перейдя к циклу while, если ValueError или UnboundLocalError не было поднято.Инициализируя c=1 перед try-except и изменяя его на 0 только в части try, программа переходит в цикл while, только если исключение не произошло.

import random
import string


def RPG():
    c=0
    try:
        RPG = ""
        count = 0
        length = int(
            input("How many characters would you like in your password? "))
    except (ValueError, UnboundLocalError):
        print("Please enter a number.")
        c=1
    if c==0:
        while count != length:
            upper = [random.choice(string.ascii_uppercase)]
            lower = [random.choice(string.ascii_lowercase)]
            num = [random.choice(string.digits)]
            symbol = [random.choice(string.punctuation)]
            everything = upper + lower + num + symbol
            RPG += random.choice(everything)
            count += 1
            continue
        if count == length:
            print(RPG)
# could also use string.printable for digits, letters, punct., and whitespace.


RPG()
0 голосов
/ 05 февраля 2019

Если вы вызвали ошибку, остальная часть программы все равно будет выполнена.Вам нужно повторять ввод, пока не получите правильный ввод.

import random
import string


def RPG():
    while True:
        try:
            RPG = ""
            count = 0
            length = int(
                input("How many characters would you like in your password? "))
            break
        except (ValueError, UnboundLocalError):
            print("Please enter a number.")
    while count != length:
        upper = [random.choice(string.ascii_uppercase)]
        lower = [random.choice(string.ascii_lowercase)]
        num = [random.choice(string.digits)]
        symbol = [random.choice(string.punctuation)]
        everything = upper + lower + num + symbol
        RPG += random.choice(everything)
        count += 1
        continue
    if count == length:
        print(RPG)
# could also use string.printable for digits, letters, punct., and whitespace.


RPG()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...