Попытка продвинуть код Python за IndexError: и продолжить - PullRequest
0 голосов
/ 14 февраля 2019

помогите, я новичок в Python и работаю над этим часами.Я пытаюсь запустить определенный код JSON, но неизвестно, будет ли список JSON иметь длину 16, 15, 14 или 13 частей.Поэтому я хотел бы, чтобы код выполнялся до тех пор, пока он не достигнет максимально возможного числа.Это то, что у меня есть:

import requests     
api_address = 'http://api.openweathermap.org/data/2.5/forecast/daily? 
zip=10603&cnt=16&appid=fe0b46e2c4f3c410fc3f8ac8d3a17600&q'          
zip_code =  79326   
url = api_address + str(zip_code)           
json_data = requests.get(url).json()
formatted_data1 = json_data['list'][16]['temp']
formatted_data2 = json_data['list'][15]['temp']
formatted_data3 = json_data['list'][14]['temp']
formatted_data4 = json_data['list'][13]['temp']
try:
print (formatted_data1)
    try:
    print (formatted_data2) 
        try:
        print (formatted_data3) 
            try:
            print (formatted_data4)

Я получаю сообщение об ошибке «SyntaxError: неожиданный EOF во время синтаксического анализа», но я запускаю это, чтобы избежать «IndexError: list index out of range», когдаУ меня

"print(formatted_data1, formatted_data2, formatted_data3, formatted_data4) " 

в конце

Пожалуйста, сообщите

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * *

Но лучшим решением было бы вообще не использовать try;вместо этого вы можете посмотреть на длину списка, чтобы вам не приходилось угадывать, сколько элементов присутствует:

if len(json_data['list']) >= 14:
    print (json_data['list'][13]['temp'])
if len(json_data['list']) >= 15:
    print (json_data['list'][14]['temp'])
if len(json_data['list']) >= 16:
    print (json_data['list'][15]['temp'])
if len(json_data['list']) >= 17:
    print (json_data['list'][16]['temp'])
0 голосов
/ 14 февраля 2019

SyntaxError вызвано неправильным отступом

# Error
try:
print (formatted_data1)

# No Error
try:
    print (formatted_data1)

IndexError вызвано попыткой получить доступ к значению, превышающему допустимый индекс.Например, a - это length из 3, все действительные права доступа к a: a[0], a[1] и a[2].Если вы попытаетесь получить [3], вы получите IndexError

следующий код

a = ['a','b','c']
print(len(a))
print(a[3])

yeild

$ python test.py
3
Traceback (most recent call last):
      File "test.py", line 3, in <module>
          print(a[3])
          IndexError: list index out of range

Обычно сообщение об ошибке сообщит вам, гдеошибка, например, File "test.py", line 3, как указано выше.

Я не уверен, хотите ли вы, чтобы последнее значение было только последним.

Если это так, попробуйте использовать lenФункция, чтобы получить длину, прежде чем пытаться получить значение, чтобы убедиться, что вы никогда не будете пытаться выйти за пределы последнего.- 1 потому что это zero-based index

import requests

api_address = 'http://api.openweathermap.org/data/2.5/forecast/daily?zip=10603&cnt=16&appid=fe0b46e2c4f3c410fc3f8ac8d3a17600&q'
zip_code =  79326
url = api_address + str(zip_code)
json_data = requests.get(url).json()

data_length = len(json_data['list']) - 1
print(data_length)

formatted_data = json_data['list'][data_length]['temp']
print(formatted_data)

Советы по отладке : используйте функцию print, чтобы распечатать значение и посмотреть, имеет ли оно смысл.

0 голосов
/ 14 февраля 2019

Вы получаете синтаксическую ошибку, потому что вы не связываете try s с , за исключением s.

try:
    print(formatted_data1)
except:
    print('These excepts are necessary')
try:
    print (formatted_data2) 
except:
    print('These excepts are necessary')
try:
    print (formatted_data3) 
except:
    print('These excepts are necessary')
try:
    print (formatted_data4)
except:
    print('These excepts are necessary')

Что касается проблемы, которую выпытаясь решить самому, ваш подход можно улучшить, используя что-то вроде ...

parts = json_data['list']

... чтобы сделать что-то вроде ...

for p in parts:
    print(p['temp'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...