簡體   English   中英

控制台中的KeyError,但是鍵存在並且功能正常

[英]KeyError in console, but key exists and function works fine

我在這里查看了所有其他關鍵錯誤問題,但找不到適合我情況的問題。 我正在從Google提取位置信息,並將json信息讀取到python列表中。 這是腳本的一部分,可以迭代Google的結果。

results = []

# def get_data():
for term, (latitude, longitude, search_radius) in search_parameters.items():
    params = {
        'query': term,
        'location': (latitude, longitude),
        'radius': search_radius
    }
    geocode_result = gmaps.places(**params)
    for i in geocode_result['results']:

        results.append(i['name'])
        results.append(i['geometry']['location']['lat'])
        results.append(i['geometry']['location']['lng'])
        results.append(i['formatted_address'])
        results.append(i['opening_hours']['open_now'])
        results.append(i['price_level'])
        results.append(i['rating'])
        results.append(i['types'])

    if 'next_page_token' in geocode_result.keys():
        while 'next_page_token' in geocode_result.keys():
            time.sleep(2.5)
            params.update({'page_token': geocode_result['next_page_token']})
            geocode_result = gmaps.places(**params)
            for i in geocode_result['results']:
                results.append(i['name'])
                results.append(i['geometry']['location']['lat'])
                results.append(i['geometry']['location']['lng'])
                results.append(i['formatted_address'])
                results.append(i['opening_hours']['open_now'])
                results.append(i['price_level'])
                results.append(i['rating'])
                results.append(i['types'])
    else:
        break

    print(results)

這是從中提取的json樣式python代碼的示例。

[{
  'html_attributions': [],
  'next_page_token': 'CpQCBgEAAFzW9_qpkvmXV8sFiwXg6dEp2jsZXEqQOO4upW1U0FZPK0kiJvSmEbx4EuhAtDD4vtJcC4duqCj6oo0P68cRkGArenzZQWr61Wne0vA44R16SrfCDWLxQjqUu8zUcdLvdB7HfOHPMd7-KWK4cmX-6bLYIJldmnJBeqhnR5xmtB_TGlMyGlzh4vZ4kOB8dc1bnD6ijWxfFyz8wJ1ugA_5hZHLXtCY6NkE8TVYgTTV9710puKlKgiVSSkjwV3IsGgEhzixzGRrVHg2dB3Ehv2KHRuXnvIQJHr-CIkUoK79vI-45pyitdYlW1h9UQk_fzDsIeec3PNE5Qz6kN--NcDv-_jzFBr7QS2RGLkAcZX4aFdfEhCoP3MAVgjsl_tKdYaIX8y_GhSvCFZSxLfWVDAyF--7T6l32G0YFw',
  'results': [{
    'formatted_address': '2222 McKinney Ave, Dallas, TX 75201, United States',
    'geometry': {
      'location': {
        'lat': 32.7935,
        'lng': -96.8021119
      },
      'viewport': {
        'northeast': {
          'lat': 32.7948813802915,
          'lng': -96.8009040197085
        },
        'southwest': {
          'lat': 32.7921834197085,
          'lng': -96.8036019802915
        }
      }
    },
    'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png',
    'id': '26ba45975d09c8889ea321078b6bf10ceff07359',
    'name': 'Smashburger',
    'opening_hours': {
      'open_now': True,
      'weekday_text': []
    },
    'photos': [{
      'height': 3024,
      'html_attributions': ['<a href="https://maps.google.com/maps/contrib/107709113475800121508/photos">Terry Wint Jr</a>'],
      'photo_reference': 'CmRaAAAA9BPb8sP5KUp9bLAgSd9dPQzH15TkG3sw5T6qOa-WSV1hi-3DLIhVzWI5woD2GtSl3aktKXTXktLUfr9vpum-XywbqFMKunee-YhWwPtwOGJaO5lULU-g1px7Z6lPUFvqEhDrofF3_89I455YRKo2hZuFGhRilVDqXdt5x2jPieN3W07UvJwsvA',
      'width': 4032
    }],
    'place_id': 'ChIJ22Ci9y-ZToYRDw1hkXkjceY',
    'price_level': 1,
    'rating': 4.1,
    'reference': 'CmRSAAAAzQIvy0nuhTQpRoAFTlilcVY_BfqGFj7gNlpNeIecwOWGV1x0qFm80zkPYFYKtJ15ilHYSoQbDH2wsQ_vahw5ilhriHA0EBWavcyev4mYVgNWssL0neY5d7YwOLAgtSEvEhBN6e_DakrfQPVtqkagEtQ4GhRCdi5cZ6CKfk6AqXkuGJ9ZVpuR-A',
    'types': ['restaurant', 'food', 'point_of_interest', 'establishment']
  }, 

我在運行終端時遇到此追溯錯誤,但是當我打印結果時,一切都返回沒有問題。

Traceback (most recent call last):
  File "testing.py", line 52, in <module>
    results.append(i['price_level'])
KeyError: 'price_level'

實際上,“ price_level”不在列表中。

您將使用geocode_result['price_level']擁有它

json文件中的鍵必須用雙引號引起來-誠實地說。

來自此處的“在JSON中,鍵必須是用雙引號寫成的字符串”: https : //www.w3schools.com/js/js_json_syntax.asp

正如一些人指出的那樣,我應該直接和間接地為我面臨的問題開一張新票。 問題是,我在呼喚值'price_level'是不是一個關鍵的'geocode_result' 我仍然可以通過調用它來獲取值,但是在輸出后觸發了keyerror。 現在,我必須弄清楚如何將'price_level ”轉換為密鑰。

謝謝大家為解決這個問題所提供的幫助。

事實證明,並不是所有反饋的響應都包含我正在調用的所有密鑰。 這就是為什么它將在看起來像整個腳本的情況下運行,然后在出現關鍵錯誤時將其停止的原因。 我要在for循環部分添加一個try語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM