2014-09-04 31 views
8

Deneme/hariç tutma bloğu içinde nasıl bir değişken yapabilirim?Bir try/except bloğu içinde bir değişken nasıl yapılır?

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) 

Bu kod NameError: name 'text' is not defined numaralı hatayı döndürür.

Değişken metni try/except bloğu dışında nasıl kullanılabilir yapabilirim?

+0

ne olacak 'text' eğer' page = urllib.request.urlopen (URL) 'istisna yükseltecektir? Bunu bir değerle ayarlamak isterseniz, bunu istisnai kapsamda veya 'try except' bloğu dışında yapabilirsiniz. –

+0

'text', URL'nin işaretlemesidir. – x0x

+0

'except' durumunda' text' * asla atanmamış *. Bu blokta veya "try" den önce 'text = None 'ayarlayabilirdiniz. Bu bir kapsam problemi değil. – jonrsharpe

cevap

15

try ifadeleri yeni bir kapsam oluşturmaz, ancak url lib.request.urlopen çağrısının istisnayı artırması durumunda text ayarlanmaz. Muhtemelen bir istisna olmadığı zaman,satırının bir else satırında olmasını istiyorsunuz. text ihtiyaçları sonradan kullanılmak üzere ise

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) 

, gerçekten değeri page için atama başarısız olursa ve page.read() diyemezsin eğer olması gerekiyordu düşünmek gerekir.

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) 

veya else fıkrada:: Bunu try açıklamaya öncesinde bir başlangıç ​​değeri verebilir,

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) 
+0

Sanırım OP, 'exception' olması durumunda 'text' için varsayılan bir değer istiyor. Bu cevabı belki de 'try except' kapsamının dışındaki varsayılan değerle veya başka birisinin içinde güncellemek ona yardımcı olacaktır. –

+0

Son snippet'te 'text' her zaman sonunda '' birşey '' atanacaktır – 4xy

0

Sadece değişken text dışında tryexcept blok beyan

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) 
+2

//, Neden bu gerekli olabilir? Python'un bu "try" ve "except", AFAIK için ayrı bir blok seviyesi kapsamı yoktur ve http://stackoverflow.com/questions/17195569/using-a-variable-in-a-try-catch adresine göre nihayet-deyim-olmadan-ilan-it-dışarıda. –

0

Bunu deneyebilirsiniz:

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 
+1

İstisna olmazsa, '' somthing''ile 'text' yazılır mı? – 4xy

+0

Bu kod çalışmıyor – 4xy

0

Daha önce yanıtlandığı gibi, try except tümcesini kullanarak tanıtılan yeni bir kapsam yoktur, bu nedenle istisna meydana gelmezse, değişkeninizi locals listesinde görmelisiniz ve geçerli (geçerli durumda) durumda erişilebilir olmalıdır. Modül kapsamında

print(locals()) 

(davanız) locals() == globals()

İlgili konular