2017-01-05 15 views
1

説明のために編集:要素とタプルを受け取る関数を作成する必要がある学校の練習をしようとしています。要素がタプルにある場合は、逆の位置に戻ります。try/exceptを介してKeyError例外を適切に処理する方法は?

プリント

[3, 0] 

しかし、要素がタプルに存在しない場合には、KeyErrorは「ないタプルの要素」と言って送信する必要があります。

def findInTupleA(elem,tuplo): 
    lista_indices = [] 
    i = 0 
    while i < len(tuplo): 
     try: 
      if tuplo[i] == elem: 
       lista_indices.append(i) 
      i = i + 1 
     except KeyError: 
      return "element not in tuple" 

    if len(lista_indices)>=1: 
     return lista_indices[::-1] 
    else: 
     return lista_indices 

まだ意図したとおりに働いていない、私はそれを素子1とタプル(2,3)を得た場合、それは代わりに、キーエラーの空のリストを返すために、そして私が求めている一方で、reverse()ではありません2番目の作業でif、理由はわかりません。

P.S.コードを改善する方法についてコメントしたいのであれば、アサート部分と同じように素晴らしいでしょう!

+0

なぜ? 'eleplus in tuplo'は動作していませんか? –

+0

コードインデントを修正してください。 –

+1

インデントを修正してください。書かれているように、プログラムは構文的に誤りです。 – DyZ

答えて

4

。あなたの関数内で例外をキャッチするのに、tryexceptを使用する必要はないと思いますが、あなた自身が例外を発生させることになっています(おそらく関数外でtry/exceptを使用しています)。

は、より多くのこのような何かを試してみてください、そして、それは何が必要ない場合は以下を参照してください

def findInTupleA(elem,tuplo): 
    lista_indices = []  
    i = 0 
    while i < len(tuplo): 
     if tuplo[i] == elem: 
      lista_indices.append(i) 
     i = i + 1 

    if len(lista_indices) >= 1: 
     return lista_indices 
    else: 
     raise IndexError("element not in tuple") 
+0

これはうまくいけば間違っている、私私は正しいサイクルを実行し、出力リストが空であるかどうかをチェックし、それが例外を提起する場合、私は正しい? – stasisOo

+1

はい、これはまさにこのコードの機能です。'if elem in tuplo'でループの前の要素を調べることができますが、' in'演算子はあなたの明示的ループと本質的に同じものなので、別のチェックはちょっとばかです。私は 'IndexError'がこのような状況で発生させる最も適切な例外ではないか(' ValueError'はより自然かもしれませんが)、あなたがあなたの割り当てに指定した仕様と一致する必要があります。 – Blckknght

2

私はあなたの問題はインデントにあると思います。私は要素indexがタプルであるかどうかをチェックする方法について

def findInTupleA(elem,tuplo): 
    lista_indices = [] 
    i = 0 
    while i < len(tuplo): 
     try: 
      if tuplo[i] == elem: 
       lista_indices.append(i) 
     except KeyError: 
      return "element not in tuple" 
     i = i + 1 

    if len(lista_indices)>=1: 
     return lista_indices[::-1] 
    else: 
     return lista_indices 
+0

findInTupleA(1、(0,2,3,4))を実行すると、KeyErrorメッセージの代わりに[]が返されます – stasisOo

+0

この回答を見てください:http://stackoverflow.com/questions/2191699/find-an -ylement-in-a-list-of-tuples –

3

...あなたが目指しているものだと思います。要素が存在しない場合、このような例外ValueErrorelement not in tupleを返す:あなたの割り当てを誤解しているようですが、私に聞こえる

def in_tuple(elem, tuplo): 

    try: 
     return tuplo.index(elem) 
    except ValueError: 
     return 'element not in tuple' 

print in_tuple(1, (2, 3)) 
+0

私が探していたものではありませんでしたが、素晴らしい情報であり、偉大な作品です。 – stasisOo

+0

@stasisOo問題なし、upvoteのおかげで! –

関連する問題