Comment puis-je rendre une variable dans le bloc try/except public?
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)
Ce code renvoie une erreur NameError: name 'text' is not defined
.
Comment puis-je rendre le texte variable disponible en dehors du bloc try/except?
Les instructions try
ne créent pas de nouvelle portée, mais text
ne sera pas défini si l'appel à url lib.request.urlopen
lève l'exception. Vous voulez probablement la ligne print(text)
dans une clause else
, afin qu'elle ne soit exécutée que s'il n'y a pas d'exception.
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)
Si text
doit être utilisé plus tard, vous devez vraiment déterminer quelle est sa valeur si l'attribution à page
échoue et que vous ne pouvez pas appeler page.read()
. Vous pouvez lui donner une valeur initiale avant l'instruction 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)
ou dans la clause 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)
Comme indiqué précédemment, aucune clause n'a été introduite à l'aide de la clause try except
. Par conséquent, si aucune exception ne se produit, vous devez voir votre variable dans la liste locals
et la rendre accessible dans la portée actuelle (globale de votre cas).
print(locals())
Dans l'étendue du module (votre cas) locals() == globals()
Il suffit de déclarer la variable text
en dehors de 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)