2016-06-15 26 views
0

私は、形容詞/名詞のペア(「良い猫」など)を探している文章を解析するPython関数を持っています。そのようなペアのリストを返します。ここでは、次のとおりです。なぜこのPython関数がNoneを返すのか分かりません。ローカルではありません。

def traverse(t): 
    thelist = list() 
    try: 
     t.label() 
    except AttributeError: 
      return 
    else: 
     if t.label() == 'NP': 
      for leaf in t.leaves(): 
        thelist.append(str(leaf[0])) 
      print("The list is ",thelist) 
      return thelist 
     else: 
      for child in t: 
        traverse(child) 

ので、同様に、私はこの関数を呼び出す:私は何を得る

print("traversing the tree returned ",traverse(pos_parser)) 

はこれです:

The list is ['good', 'cat'] 
traversing the tree returned None 

だから、トラバースで変数 "thelist" を作成し、出力しますそれを返さない(代わりにNoneを返す)。なぜ??

誰かが助けてくれますか?

+2

の可能性のある重複した[再帰コードNoneを返す](http://stackoverflow.com/q/22311440/953482) – Kevin

+2

注:暗黙的属性のエラーで復帰戻り値なし –

+0

デバッガでステップ実行を試みましたか?それはAttributeError例外に当たっていますか? –

答えて

0

traverse関数を初めて使用したときは、再帰的にtraverseと呼ばれる最後の行に当たっていると思います。しかし、あなたはその呼び出しの出力に関して何もしません。私の推測では、最後の行を修正してトラバースコールの出力を取得し、最終的にリストを返す必要があるということです。

そのまま、リーフノードの呼び出しではreturnと呼んでいるだけです。

このような何か:

def traverse(t): thelist = list() try: t.label() except AttributeError: return else: if t.label() == 'NP': for leaf in t.leaves(): thelist.append(str(leaf[0])) print("The list is ",thelist) return thelist else: for child in t: thelist.append(traverse(child)) return thelist

関連する問題