Rodion Mikhailov Ответов: 1

Есть ли способ использовать переменные, назначенные внутри предложения "try" в предложении "except"?


Я назначил переменную (month1) внутри "try" и хочу получить к ней доступ внутри предложения "except". Но я получаю "переменная не может быть определена".

Переменная (month1) сохраняется, потому что я могу использовать ее после предложения "except" (просто распечатайте ее не в специальной конструкции). Но когда я пытаюсь использовать его в "except" (например, в моем коде), он говорит мне: "переменная не может быть определена". Почему? И есть ли способ сделать это ?

Что я уже пробовал:

Here is my code:

<pre lang="Python">try:
    month1 = int(input("Enter your month's of birth number: "))
    day1 = int(input("Enter your day of birth: "))
    year1 = int(input("Enter your year of birth: "))
    print("You were born in " + months_by_number[month1] + " " + str(day1) + " " + str(year1))
except ValueError:
    print("You had to enter a NUMBER !")
except KeyError :
    print("There are 12 month, not " + str(month1)) # here I get "variable can't be difined"

1 Ответов

Рейтинг:
9

raddevus

Переменные имеют время жизни (область действия) блока, в котором они объявлены.
Это вызовет исключение, поскольку x не определен.

try:
  print(x)
except:
  print("An exception occurred")


Этот будет работать
try:
  x = 5
  print(x)
except:
  print("An exception occurred")



Все, что вам нужно сделать, это объявить свою переменную вне области try.
Перед областью try, так что переменная все еще существует в вашем блоке except.

x = 5
try:
  print(x)
  raise Exception("fail!")
except NameError:
  print("Variable x is not defined")
except:
  print(x)
  print("Something else went wrong")


Это вызовет исключение, но x все равно будет иметь область действия (время жизни) и будет распечатан во 2-м случае исключения.


Rodion Mikhailov

Большое вам спасибо, это помогло.
Мне нужно было не просто назначить переменную, но и сделать так, чтобы она была целочисленной. Итак, вот что я сделал. Это хорошо ? Это работает.

month1 = input("введите номер вашего месяца рождения: ")
пробовать:
month1 = int(month1)
day1 = int(input("введите свой день рождения: "))
year1 = int(input("введите свой год рождения: "))
print("вы родились в" + months_by_number[month1] + ""+ str(day1) + "" + str(year1))
кроме ValueError:
печать("вы должны были ввести номер !")
кроме KeyError:
print("есть 12 месяцев, нет" + str(month1))

raddevus

Да, выглядит неплохо. Теперь переменная month1 имеет область действия, которая больше, чем просто блок try.