2017-07-18 23 views
1

状態名を入力するように求めるスクリプトを作成しています。スクリプトは、状態が実際に辞書に入っていて、資本を返すかどうかをチェックします。状態が辞書にない場合は、それは辞書にないことを示します。私はKeyErrorを除いて試してみましたが、Pythonはまだ私にエラーを与えます。私は何を間違えたのですか?エラー例外を除外しようとしました - KeyError

state_dictionary = {'Colorado': 'Denver', 'Alaska': 'Juneau', 'California': 'Sacramento', 
         'Georgia': 'Atlanta', 'Kansas': 'Topeka', 'Nebraska': 'Lincoln', 
         'Oregon': 'Salem', 'Texas': 'Austin', 'New York': 'Albany'} 

if True: 
    search_state=input("What is the State of the Capital you want to know? ") 
    try: 
     state_dictionary[search_state] 
    except KeyError: 
     print ('No such a State') 
    print (state_dictionary[search_state]) 

What is the State of the Capital you want to know? Italia 
No such a State 

--------------------------------------------------------------------------- 
KeyError         Traceback (most recent call last) 
<ipython-input-38-c6d25bb66225> in <module>() 
    13  except KeyError: 
    14   print ('No such a State') 
---> 15  print (state_dictionary[search_state]) 

KeyError: 'Italia' 

答えて

1

あなたは確かにtryを実装しようとしますが、あなたはその後、まだそれはまだエラーが出て、あなたのprint文でstate_dictionary[search_state]への呼び出しを行うからです。

試してみてください。

state_dictionary = {'Colorado': 'Denver', 'Alaska': 'Juneau', 'California': 'Sacramento', 
         'Georgia': 'Atlanta', 'Kansas': 'Topeka', 'Nebraska': 'Lincoln', 
         'Oregon': 'Salem', 'Texas': 'Austin', 'New York': 'Albany'} 

if True: 
    search_state=input("What is the State of the Capital you want to know? ") 
    try: 
     state_dictionary[search_state] 
     print (state_dictionary[search_state]) 
    except KeyError: 
     print ('No such a State') 
1

エラーは、実際に、来ているあなたのコードの最後に、あなたがこれをやっている:

print (state_dictionary[search_state]) 

だから、あなたあなたの例外をキャッチして、継続的なあなたのコードはまだ存在しないstateにアクセスしようとしています。

state_dictionaryにアクセスしようとしたら、印刷してみてください。それがうまくいくとそこに着くだけです。さらに、電話を2回しないでください。変数に自分の結果を格納し、その結果、印刷​​:さらに

try: 
    capital = state_dictionary[search_state] 
    print (capital) 
except KeyError: 
    print ('No such a State') 

を、あなたこれで別の方法を探すことができます。あなたは、エントリが辞書に存在するかどうかをチェックするためにinキーワードを使用することができます改善の

search_state=input("What is the State of the Capital you want to know? ") 
if search_state in state_dictionary: 
    print (state_dictionary[search_state]) 
else: 
    print ('No such a State {}'.format(search_state)) 

分野の一つは、あなたも行うことができます、あなたが今正確なケースが一致することを期待されていることです。辞書のエントリをに変更することをお勧めします。小文字を入力してください。チェックを行うと、lowercaseになりますので、「texas」と入力すると実際に正しく一致します。現在のように、「テキサス」と入力すると、「テキサス」と一致しません。

state_dictionary = {'colorado': 'Denver', 'alaska': 'Juneau', 'california': 'Sacramento', 
         'georgia': 'Atlanta', 'Kansas': 'Topeka', 'nebraska': 'Lincoln', 
         'oregon': 'Salem', 'texas': 'Austin', 'new york': 'Albany'} 

try: 
    capital = state_dictionary[search_state.lower()] 
    print (capital) 
except KeyError: 
    print ('No such a State') 
0

を除き、試しに「他に」ステートメントを追加します。

だから、今行うことができます(search_state.lower()の呼び出しに注意してください)。例外が存在しない場合にのみ実行されます:

try: 
    state_dictionary[search_state] 
except KeyError: 
    print ('No such a State') 
else: 
    print (state_dictionary[search_state]) 
0

あなたは辞書を持って、あなただけのエラーをスローし、それが存在しない場合は何を得ませんしstate_dictionary.get(key)を使用することができます。キャッチしようとするよりも優れています。

関連する問題