2016-08-28 4 views
1

私は現在GIPHY APIに基づいてランダムなgifを生成するWebビルダーを作っています。私は問題を抱えています。ここでは、APIが0の結果を返すケースをテストします。関数から抜け出し、ループに戻る方法は?

def get_image_link(link): 
global flag 
set_count = 0 
r = requests.get(link) 
api_response = json.loads(r.text) 
response = api_response['data'] 
if not response: 
    print('GIPHY API returned no results... finding another word...') 
    pass 
elif response: 
    for set in response: 
     set_count += 1 
    random_gif_num = random.randint(0, set_count) - 1 
    try: 
     flag = True 
     return response[random_gif_num]['images']['original']['url'] 
    except TypeError: 
     print(TypeError + '... rerunning application...') 
     pass 

while not flag: get_image_link(get_random_query())

結果は結果ではデータなしで戻ってくる場合には基本的に、私はそれが別の単語をつかむために機能を再試行します。このプログラムは結果のある単語が戻ってきたときに機能しますが、0の結果が返ってくると私はTypeErrorとなり、ループに戻りません。私は関数から抜け出ず、代わりに[]型を返すので、これを行うと確信しています。どうすれば関数から抜け出し、whileループに戻り、別の結果を生成することができますか?ありがとうございました。

答えて

2

あなたは、関数すなわち外で例外をキャッチ移動することができます。

while not flag: 
    try: 
     get_image_link(get_random_query()) 
    except TypeError: 
     flag = False 
     print('TypeError... rerunning application...') 
     pass 
+0

実行して別の単語を検索しようとしても、私はまだTypeErrorを取得し、ファイルを停止します。どんな考え? – Lewis

+0

@Lewis私は例外ではなく、何らかの理由で 'True'に設定された' flag'変数に関連しています。 – Samuel

+0

get_image_link()は他の場所で呼び出されています。応答変数が[]に等しいときでもループの他の部分にアクセスできると思いますか? – Lewis

2

リセットフラグをfalseに!

try: 
    flag = True 
    return response[random_gif_num]['images']['original']['url'] 
except TypeError: 
    flag = false 
    print(TypeError + '... rerunning application...') 
    pass 
+0

私はこれを試してみましたが、何度も動作しましたが、何らかの形でTypeErrorが発生し、コードが取り消されました。どんな考え? – Lewis

+2

@Lewis問題はプリントされているので、 'TypeError'を例外オブジェクトに連結してみましょう。これは意味をなさないものです。' print( 'TypeError ... rerunning application ...') ' – Copperfield

関連する問題