2014-09-04 10 views
8

मैं सार्वजनिक रूप से ब्लॉक को छोड़कर/कोशिश के अंदर एक चर कैसे बना सकता हूं?सार्वजनिक रूप से ब्लॉक को छोड़कर/कोशिश करने के अंदर एक चर बनाने के लिए कैसे?

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 त्रुटि देता है।

मैं परिवर्तनीय पाठ को कोशिश/ब्लॉक को छोड़कर बाहर कैसे कर सकता हूं?

+0

क्या होगी 'text' यदि' पेज = urllib.request.urlopen (यूआरएल) 'एक अपवाद बढ़ा देंगे? यदि आप इसे कुछ मूल्य के साथ सेट करना चाहते हैं तो आप इसे छोड़कर 'ब्लॉक को छोड़कर' प्रयास के बाहर कर सकते हैं। –

+0

'टेक्स्ट' यूआरएल का मार्कअप है। – x0x

+0

'छोड़कर' मामले में 'टेक्स्ट' है * कभी असाइन नहीं किया गया *। आप उस ब्लॉक में या 'try' से पहले' text = none' सेट कर सकते हैं। यह एक गुंजाइश समस्या नहीं है। – jonrsharpe

उत्तर

15

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() फोन नहीं कर सकते हैं माना जाता है के बारे में सोचने की जरूरत है।

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 बयान से पहले दे सकते हैं,

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

मुझे लगता है कि ओपी 'अपवाद' होने पर 'टेक्स्ट' के लिए डिफ़ॉल्ट मान चाहता है। तो हो सकता है कि इस उत्तर को 'स्कोप को छोड़कर कोशिश करें' के बाहर डिफ़ॉल्ट मान के साथ अद्यतन कर रहा है या अन्यथा उसकी मदद करेगा। –

+0

अंतिम स्निपेट में 'टेक्स्ट' हमेशा अंततः' कुछ 'निर्दिष्ट किया जाएगा यदि कोई अपवाद – 4xy

0

बस चर text बाहर tryexcept ब्लॉक घोषित

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

//, यह क्यों आवश्यक होगा? पाइथन के पास इस 'try' और 'को छोड़कर', AFAIK के लिए अलग-अलग ब्लॉक-स्तरीय दायरा नहीं है, और http://stackoverflow.com/questions/17195569/using-a-variable-in-a-try-catch के अनुसार -finally बयान-बिना-घोषित यह बाहर। –

0

आप इसे आजमा सकते हैं:

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

यदि कोई अपवाद नहीं होता है तो क्या आप 'कुछ' के साथ 'text' को ओवरराइट करेंगे? – 4xy

+0

यह कोड काम नहीं करता है – 4xy

0

के रूप में जवाब से पहले कोई नई गुंजाइश try except खंड का उपयोग करके शुरू की है, इसलिए यदि कोई अपवाद तब होता है आप locals सूची में अपने चर देखना चाहिए और यह वर्तमान में सुलभ गुंजाइश (अपने मामले वैश्विक में) होना चाहिए।

print(locals()) 

मॉड्यूल गुंजाइश में (अपने मामले) locals() == globals()

संबंधित मुद्दे

 संबंधित मुद्दे