2012-05-12 15 views
0

更新: Woobleのコメントに対する応答として、forの前に "sector = None"を追加すると "None"が返されます。問題は、forループの変数が返されていないということです。UnboundLocalError:割り当て前に参照されるローカル変数 "xyz"

以下は、コードの一見無関係な部分を変更した最近まで、正常に動作していた関数の一部です。

# - >私は最近変更した部分のみがreturn文

に「stockurl」を追加しました私は今UnboundLocalErrorます:割り当て前に参照されたローカル変数「セクタ」は、 "に言及リターン」ライン

for sec in root.xpath(r'''//a[re:match(@href, "http://biz.yahoo.com/p/[0-9]{1}conameu.html")]''', 
       namespaces={'re': 'http://exslt.org/regular-expressions'}): 
    sector = sec.text 
    #print "Sector: " + sector 

for ind in root.xpath(r'''//a[re:match(@href, "http://biz.yahoo.com/ic/[0-9]{1,9}.html")]''', 
     namespaces={'re': 'http://exslt.org/regular-expressions'}): 
    industry = ind.text 
    #print "Industry: " + industry 

#index   --> don't populate here 
#followers --> don't populate here 

return a, b, c, d, e, f, stockurl, sector, industry 
    #--> the only part I had changed recently was adding "stockurl" to the function 
+0

ここで、これはどこで使用されていますか/これ以前に定義されていますか?もっとコードを投稿できますか?また、セクタは第1回目のfor-loop実行の本体に依存しています(しかし、関係するかもしれません) – Levon

+2

最初の 'for'が実行されない場合(' root.xpath() 'は何も返しません)セクターは定義されません。 forの前に 'sector = None'を置いてみてください。 – geoffspear

+0

の前に "sector = None"を追加すると、単に "None"が返されます。問題は、forループの変数が返されていないということです。 – snakesNbronies

答えて

5

のは、エラーメッセージを見て、逆方向に動作してみましょう:

local variable "sector" referenced before assignment

つまり、sectorを参照していますが、sectorはオブジェクトに割り当てられていないか、またはバインドされていません。

sectorへの唯一の帰属はloopの本文の内側です。だから、明らかに、forループの本文が入力されていませんでした。そして、これは、root.xpath()の呼び出しが空の繰り返し可能なオブジェクトを返す場合にのみ発生します。

+0

はい!ただエラーをキャッチしました。上記のコメントを参照してください。 – snakesNbronies

+0

私は上記のコメントが同じことを言っていることを知っていますが、私はあなたが報告したことを説明する唯一の結論である理由について、ステップの説明でちょっとしたステップを書きたいと思っていました。 –

関連する問題