-1

返す配列が空かどうかを確認しようとしています。

私が試しているコードは次のとおりです。

if (r.json()['negative'][0]['topic']) == "":

私が得ているエラーは、インデックスが範囲外のエラーです。

配列に何もないことを意味することはわかっていますが、何も返さないため、コードがクラッシュしています。

何か案は?

4

3 に答える 3

3

コードが失敗する原因となっている空の配列 r.json()['negative'] から最初の要素にアクセスしようとしています。

「負の」キーが空の配列でないかどうかを確認してから、状態を確認してください。

if (r.json()['negative']:
    if (r.json()['negative'][0]['topic']) == "":
于 2015-10-07T13:14:00.170 に答える
2

すべてを 1 行にまとめないでください。正確に何が起こっているのかを知る能力が失われます。

data = r.json()
if 'negative' not in data:
    print('negative key is missing')
elif len(data['negative']) == 0:
    print('no items in the negative list')
elif 'topic' not in data['negative'][0]:
    print('topic is missing')
elif data['negative'][0]['topic'] == '':
    print('topic is empty')
else:
    # now you can access it safely
    print(data['negative'][0]['topic'])
于 2015-10-07T13:10:45.823 に答える
1

辞書のリスト内の辞書のセットに 3 深く入っているので、他の人が提案したように、ほぼ確実に各コンテナーの長さを確認する (またはキーが辞書にあることを確認する) 必要があります。例外をキャプチャして先に進むために、一部の人がよりPythonicを使用しています。

try:
    if (r.json()['negative'][0]['topic']) == "":
        # do stuff
except IndexError:
       # do other stuff

これIt is better to ask forgiveness than to ask permissionが一般的に使われている原則です。

于 2015-10-07T13:16:32.620 に答える