2014-03-13 38 views
0

我一直在獲取UnboundLocalError: local variable 'res' referenced before assignmentPython奇怪的錯誤 - 賦值之前引用的變量

但是,我絕對肯定該變量在賦值之前未被引用!

這裏是我的代碼:

def get_models(self,x=None,y=None): 
     bioservices_up_obj = UniProt() 
     bioservices_quickgo_obj = QuickGO() 
     res = bioservices_quickgo_obj.Annotation_from_protein(protein=str(Brick.part_attrib(self,'uniprot_id'))) 
     go_id = [] 
     go_number = len(res['goID']) 
     for i in range(go_number): 
      go_id.append(str(res.iloc[i]['goID'])) 
     results = bioservices_up_obj.search(go_id[:go_number],format="tab",columns="id",sort="score",maxTrials=2) 
     print results 

所有其他變量似乎打印出精美,但由於某些原因,我不斷收到此錯誤。

+0

你能發佈完整的異常追蹤嗎? –

+1

您確定回溯點指向此功能嗎?行號回溯顯示什麼? –

+0

'回溯(最近通話最後一個): 文件 「」,1號線,在 文件 「/home/willem/Documents/Python_Work/assignment2_update3.py」,線路172,在get_models 結果= bioservices_up_obj.search( go_id [:go_number],format =「tab」,columns =「id」,sort =「score」,maxTrials = 2) 文件「/usr/local/lib/python2.7/dist-packages/bioservices/uniprot。 PY 「線路470,在搜索 回報RES UnboundLocalError:assignment' – Charon

回答

1

檢查庫的源之後,您正在使用

File "/usr/local/lib/python2.7/dist-packages/bioservices/uniprot.py", line 470, in search 

看來,線470也確實有一個bug。在同一個文件中的第459行在最新版本中被註釋掉了,這似乎是造成這個錯誤的原因。

下載的壓縮包從here,打開uniprot.py,觀察到:

#res = s.request("/uniprot/?query=zap70+AND+organism:9606&format=xml", params) 
trials = 3 
while trials<maxTrials: 
    try: 
     res = self.request("uniprot/?query=%s" % query + "&" + params, "txt") 
     trials = maxTrials + 1 
    except: 
     self.logging.warning("Trying again...") 
     import time 
     time.sleep(2) 
     trials += 1 
return res 

通知的註釋第一線(線459在文件中)。您可以嘗試取消註釋該行,但我對圖書館不熟悉,所以我不知道該怎麼辦。

該項目的bug跟蹤器是here,也許你可以提交一個錯誤報告。

+0

謝謝,是的,我已經看到了,但我不認爲取消註釋該行是解決方案,我認爲它的底線是'return res',出於某種原因,我認爲它需要與'except'一行縮進,但即使這樣也行不通! – Charon

+1

If我是debu gging它,我首先嚐試在'try'塊的末尾放置'return res'(即在'trials = maxTrials'之後並縮進到同一級別) - 雖然不可能知道會引起什麼問題不知道庫和測試一下。 –

+0

是的,我真的嘗試過,但它仍然沒有工作 - 然後我剛剛得到輸出'無',這應該不可能與我輸入的參數。幸運的是,在包中有一個相同功能的替代版本,所以我正在使用它。 – Charon

0

可能尋找回溯功能bioservices_up_obj.search返回變量res這是未定義的。所以問題不在get_models

我已經調查的uniprot.py在行464它的代碼做基於一些limitied嘗試while循環得到一個查詢網址的響應,如果所有的嘗試失敗,它將退出,因此變量res仍未定義爲res僅在try塊中定義。

我會建議你手動更改庫代碼檢查究竟出了毛病,查詢網址,以提高在行469個例外

+0

是的,我現在可以看到它是在一個我導入的模塊中,現在我只需要弄清楚如何解決這個問題! – Charon

0

我建議檢查整個回溯message.I thinck異常來自另一個方法。

對不起:我不能添加評論。

相關問題