try print exceptions examples example error custom catch and all python python-3.x scope local-variables try-except

python - print - ¿Cómo hacer que una variable dentro de un bloque try/except sea pública?



try except python example (3)

Como se respondió antes, no se ha introducido un nuevo ámbito mediante el uso de la cláusula de try except , por lo que si no se produce una excepción, debería ver su variable en la lista de locals y debería estar accesible en el ámbito actual (en su caso, global).

print(locals())

En el alcance del módulo (su caso) locals() == globals()

¿Cómo puedo hacer que una variable dentro del bloque try / except sea pública?

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)

Este código devuelve un error NameError: name ''text'' is not defined .

¿Cómo puedo hacer que el texto variable esté disponible fuera del bloque try / except?


Solo declare el text variable fuera de try except bloque,

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)


try declaraciones de try no crean un nuevo ámbito, pero el text no se establecerá si la llamada a url lib.request.urlopen genera la excepción. Es probable que desee la línea de print(text) en una cláusula else , de modo que solo se ejecute cuando no hay excepción.

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 se necesita usar el texto más adelante, realmente debe pensar cuál es su valor si la asignación a la page falla y no puede llamar a page.read() . Puede darle un valor inicial antes de la declaración de 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)

o en la cláusula 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)