Как сделать переменную внутри объекта try/except public?
Как я могу сделать переменную внутри блока try/кроме общедоступной?
import urllib.request
try:
url = "http://www.google.com"
page = urllib.request.urlopen(url)
text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
print("Unable to process your request dude!!")
print(text)
Этот код возвращает ошибку
NameError: имя 'text' не определено
Как сделать переменный текст доступным вне блока try/Кроме?
Ответы
Ответ 1
Операторы try
не создают новую область, но text
не будет установлен, если вызов url lib.request.urlopen
вызывает исключение. Вероятно, вам нужна строка print(text)
в предложении else
, так что она будет выполняться только в случае отсутствия исключения.
try:
url = "http://www.google.com"
page = urllib.request.urlopen(url)
text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
print("Unable to process your request dude!!")
else:
print(text)
Если text
нужно использовать позже, вам действительно нужно подумать о том, что его значение должно быть, если присваивание page
завершается с ошибкой, и вы не можете вызвать page.read()
. Вы можете дать ему начальное значение перед оператором try
:
text = 'something'
try:
url = "http://www.google.com"
page = urllib.request.urlopen(url)
text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
print("Unable to process your request dude!!")
print(text)
или в else
:
try:
url = "http://www.google.com"
page = urllib.request.urlopen(url)
text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
print("Unable to process your request dude!!")
else:
text = 'something'
print(text)
Ответ 2
Как уже было сказано, новая оболочка не вводится с помощью предложения try except
, поэтому, если не возникает никакого исключения, вы должны увидеть свою переменную в списке locals
, и она должна быть доступна в текущей (в вашем случае глобальной) области.
print(locals())
В области модуля (ваш случай) locals() == globals()
Ответ 3
Просто объявите переменную text
вне try
except
block,
import urllib.request
text =None
try:
url = "http://www.google.com"
page = urllib.request.urlopen(url)
text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
print("Unable to process your request dude!!")
if text is not None:
print(text)
Ответ 4
вы можете попробовать следующее:
try:
url = "http://www.google.com"
page = urllib.request.urlopen(url)
text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
text = "Unable to process your request dude!!"
else:
text = ""
finally:
print text