Python IndexError: list index out of range
Je suis d'essayer d'obtenir Python pour remplir les listes avec le prix de clôture de 500 actions. Alors que le code semble fonctionner très bien pour juste un peu de stocks, la grande quantité qui pose problème. Python continue de me donner le message d'erreur suivant: "OneClose.append(Data[i][4]) IndexError: list index out of range.
" je ne suis pas sûr de savoir comment remédier à ce problème. Peu importe ce que je semble entrer dans le champ plage (31, dans ce cas), l'erreur persiste.
raw = open('C:\Model\Stocks\list.txt', 'r').read()
stocks = raw.split('\n')
for stock in stocks:
Data = ystockquote.get_historical_prices(stock, '20120501', '20120716')
# Create empty lists, quick and dirty
OneClose = [ ]
OneDate = [ ]
# Populate lists from downloaded data
for i in range(1, 31):
OneDate.append(Data[i][0])
OneClose.append(Data[i][4])
Data
contient:
Data = [['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Clos'],
['2012-07-13', '86.32', '87.83', '86.32', '87.54', '1937700', '87.5'],
['2012-07-13', '86.32', '87.83', '86.32', '87.59', '2599300', '87.5'],
['2012-07-12', '86.60', '86.97', '85.34', '86.41', '4938300', '86.4'],
['2012-07-11', '88.38', '88.76', '87.01', '87.85', '4208600', '87.8'],
['2012-07-10', '89.08', '89.82', '87.96', '88.25', '3356800', '88.2'],
['2012-07-09', '88.86', '89.08', '88.31', '88.96', '2600900', '88.9'],
['2012-07-06', '88.81', '89.38', '88.35', '88.99', '2192900', '88.9'],
['2012-07-05', '89.20', '89.95', '88.86', '89.57', '1924800', '89.5'],
['2012-07-03', '89.11', '89.75', '89.08', '89.70', '1410400', '89.7'],
['2012-07-02', '89.29', '89.69', '88.28', '89.28', '2289700', '89.2'],
['2012-06-29', '88.62', '89.60', '88.35', '89.60', '4629400', '89.6'],
['2012-06-28', '86.36', '87.25', '85.98', '87.16', '3267100', '87.1'],
['2012-06-27', '86.39', '87.60', '86.24', '87.16', '2887800', '87.1'],
['2012-06-26', '85.91', '86.47', '85.29', '86.18', '2389100', '86.1'],
['2012-06-25', '85.87', '86.31', '85.46', '85.85', '2908900', '85.8'],
['2012-06-22', '87.11', '87.14', '86.38', '86.83', '3026000', '86.8'],
['2012-06-21', '88.04', '88.38', '86.62', '86.73', '3722800', '86.7'],
['2012-06-20', '87.93', '88.28', '87.35', '87.54', '3446800', '87.5'],
['2012-06-19', '87.82', '88.17', '87.52', '87.82', '3212500', '87.8'],
['2012-06-18', '87.07', '87.61', '86.67', '87.31', '2950600', '87.3'],
['2012-06-15', '87.57', '87.91', '87.01', '87.44', '4696100', '87.4'],
['2012-06-14', '86.31', '87.23', '86.06', '86.86', '3334900', '86.8'],
['2012-06-13', '86.30', '86.80', '85.72', '86.13', '3370500', '86.1'],
['2012-06-12', '85.67', '86.74', '85.22', '86.73', '2570900', '86.7'],
['2012-06-11', '86.54', '86.54', '85.08', '85.18', '2098200', '85.1'],
['2012-06-08', '85.18', '86.09', '84.99', '86.00', '2146200', '86.0'],
['2012-06-07', '85.59', '86.19', '85.33', '85.50', '3032400', '85.5'],
['2012-06-06', '83.22', '84.64', '83.03', '84.63', '2776300', '84.6'],
['2012-06-05', '82.59', '82.86', '82.25', '82.51', '3268700', '82.5'],
['2012-06-04', '82.79', '82.99', '81.99', '82.62', '2899900', '82.6'],
['2012-06-01', '83.05', '83.98', '82.72', '82.85', '3539200', '82.8'],
['2012-05-31', '84.45', '85.05', '83.87', '84.41', '3683200', '84.4'],
['2012-05-30', '85.06', '85.12', '84.10', '84.45', '2697100', '84.4'],
['2012-05-29', '85.38', '86.00', '85.13', '85.73', '2142200', '85.7'],
['2012-05-25', '84.87', '85.20', '84.40', '84.78', '2346000', '84.7'],
['2012-05-24', '84.96', '85.00', '84.03', '84.98', '2322100', '84.9'],
['2012-05-23', '83.37', '84.88', '82.95', '84.80', '3200000', '84.8'],
['2012-05-22', '84.69', '84.99', '83.68', '84.13', '3000900', '84.1'],
['2012-05-21', '83.88', '84.63', '83.75', '84.46', '2450000', '84.4'],
['2012-05-18', '84.78', '84.78', '83.27', '83.51', '3602900', '83.5'],
['2012-05-17', '85.56', '85.64', '84.25', '84.34', '2777200', '84.3'],
['2012-05-16', '85.91', '86.27', '85.26', '85.35', '2770600', '85.3'],
['2012-05-15', '85.95', '86.46', '85.50', '85.78', '2611300', '85.1'],
['2012-05-14', '85.46', '86.55', '85.24', '85.83', '2631900', '85.2'],
['2012-05-11', '86.47', '87.48', '86.24', '86.73', '2601800', '86.1'],
['2012-05-10', '87.14', '87.69', '86.88', '87.13', '2828500', '86.5'],
['2012-05-09', '86.64', '87.84', '85.98', '87.27', '3192800', '86.6'],
['2012-05-08', '87.12', '87.88', '86.30', '87.56', '2710400', '86.9'],
['2012-05-07', '87.70', '88.62', '87.70', '88.01', '2753500', '87.4'],
['2012-05-04', '89.17', '89.24', '88.30', '88.67', '2823800', '88.0'],
['2012-05-03', '89.50', '89.85', '89.11', '89.39', '2343600', '88.7'],
['2012-05-02', '89.16', '89.59', '88.89', '89.52', '2100200', '88.9'],
['2012-05-01', '89.13', '89.95', '88.74', '89.60', '2294200', '88.9']
]
ces Données ne montrent aucune erreur! n'est ce pas? L'erreur peut être dans un autre ensemble de Données (à partir d'un autre itération de "pour le de stock dans les stocks:")
OriginalL'auteur user1526586 | 2012-07-16
Vous devez vous connecter pour publier un commentaire.
Remplacer:
avec:
Généralement, cela se fait quand
Data
tableau a moins de 31 indices. Également veiller à ced
tableau a au moins 5 éléments, d'autred[4]
permettra également de jeter une erreur similaire. Utilisation:1
pas de0
, voirrange(1,31)
ystockquote est un module qui nécessite l' [0] et [4] en tant que références pour les données à récupérer à partir de yahoo finance (les dates et les prix de clôture de respectivement). Pour une raison quelconque, le ci-dessus ne fonctionne pas dans ce cas.
J'ai édité. Mais l'OP est pas encore clair avec sa question.
pouvez-vous poster le contenu de
data
dans votre post?Merci d'éditer votre question et de mettre en
Data
'valeur.OriginalL'auteur UltraInstinct
Deux choses peuvent se produire avec
Data[i][4]
:Data
ne dispose pas d'un élément à la positioni
.Data[i]
ne dispose pas d'un élément à la position4
.Python génère une
IndexError
dans ces deux situations. Avez-vous vérifié que vos données sont valides et que les situations ne se produisent pas?Il se pourrait que des données sont manquantes dans votre fichier texte et que
ystockquote.get_historical_prices
est impossible de créer une liste avec les données dans le format attendu.OriginalL'auteur Simeon Visser
L'un des éléments de
Data
a moins de 5 éléments.Votre code a
et, l'exception est dans la deuxième ligne. Ainsi, vous pouvez être sûr qu'il ya certainement un élément dans
Data
, à la positioni
. (parce que, s'ils ne sont pas, à l'exception aurait été à la première ligne).Donc, l'erreur est parce que
Data[i]
n'a pas 5 éléments.(eg. si les Données[i] est une chaîne, il a moins de 5 caractères).
Vous solution pourrait être de vérifier la durée de
Data[i]
et de s'assurer qu'il dispose d'assez d'éléments, avant d'essayer de les lire.OriginalL'auteur Dr. S