Try/exceptブロック内の変数をパブリックにするにはどうすればよいですか?
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: name 'text' is not defined
を返します。
Try/exceptブロックの外部で変数テキストを使用可能にするにはどうすればよいですか?
try
ステートメントは新しいスコープを作成しませんが、_url lib.request.urlopen
_の呼び出しで例外が発生した場合、text
は設定されません。おそらくelse
句にprint(text)
行が必要なので、例外がない場合にのみ実行されます。
_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)
_
前に回答したように、_try except
_句を使用して新しいスコープが導入されることはありません。したがって、例外が発生しない場合は、locals
リストに変数が表示され、現在の(場合によってはグローバル)スコープでアクセスできるはずです。
_print(locals())
_
モジュールスコープ(あなたの場合)locals() == globals()
text
try
ブロックの外で変数except
を宣言するだけで、
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)