2017-10-08 86 views
-2

我得到一個錯誤,當我嘗試運行這個簡單的Python腳本:NameError:名字 'urlstring' 沒有定義

for url in urllist: 
      try: 
       file = urllib2.urlopen (url) 
       urlstring = file.read() 
      except: 
       print "Can't open URL" 
       pass 
      m = [ ] 
      m = re.findall (


r'file:///\\results.cal.ci.spirentcom.com\\smt\\SCMSmartTest\\\d+.\d+\\BLL\d+_IL\d+\\.*?\\TC\S+tcl', 
      urlstring) 
     copyFileCounts = 1 

以下錯誤顯示:

Traceback (most recent call last): File "D:\Python\untitled\regression.py", line 75, in urlstring) NameError: name 'urlstring' is not defined

+0

錯誤顯然告訴你現在有'urlstring',所以也許你的代碼失敗了,而不是'try',你的'except'已經跑了?爲什麼不把m = re.findall()移到'try/except'的東西? – senaps

+0

感謝它的作品 –

+0

不要抓住所有的例外!這不是口袋妖怪! –

回答

0

不知道如果這是一個錯字,但是當您爲urlstringfile分配值時,您有空間。

當使用try .. catch時,您應該儘量保留try塊中的代碼:如果發生故障,您將知道原因,而無需太多調試。

你可以做的是使用else從句。

The try … except statement has an optional else clause, which, when present, must follow all except clauses. It is useful for code that must be executed if the try clause does not raise an exception.

所以,你的代碼應該是這樣的:

for url in urllist: 
    try: 
     file = urllib2.urlopen(url) 
     urlstring = file.read() 
    except IOError as e: 
     print "Can't open URL: {}".format(e.message) 
    else: 
     m = [] 
     m = re.findall (..) 

你也應該捕捉異常時,捕獲所有的人是不是一個好主意,更具體。

+0

如果你downvote,至少發表評論 – Vinny

0

使用對方的回答來修復代碼:

m = [] 
for url in urllist: 
     try: 
      file = urllib2.urlopen (url) 
      urlstring = file.read() 
      m = re.findall (r'file:///\\results.cal.ci.spirentcom.com\\smt\\SCMSmartTest\\\d+.\d+\\BLL\d+_IL\d+\\.*?\\TC\S+tcl', 
     urlstring) 
      copyFileCounts = 1 
     except IOError as e: 
      print "Can't open URL: {}".format(e.message) 

這是一個很好的做法,做的事,並請求原諒,所以做任何你想做的事情,然後如果有趕上錯誤。 EAFP

相關問題