IndexError: list index out of range sur un script Python...
Bonjour,
J'utilise un script Python depuis pratiquement 2 ans, pour gérer la géolocalisation des iPhone de la maison, dans le cadre d'un système domotique.
Depuis aujourd'hui, quand je lance le script, j'ai systématiquement un message d'erreur :
pi@raspberrypi:~ $ sudo python3 geoloc.py
Setup Time Zone
Py iCloud Services
Two-factor authentication required. Your trusted devices are:
Which device would you like to use? [0]: 0
Traceback (most recent call last):
File "geoloc.py", line 29, in <module>
device = devices[device]
IndexError: list index out of range
Voici le script :
import os
import click
import datetime
import time
import requests
from pyicloud import PyiCloudService
print("Setup Time Zone")
time.strftime("%X %x %Z")
os.environ["TZ"] = "Europe/Paris"
print("Py iCloud Services")
#remplacer par votre mail et password de compte icloud
api = PyiCloudService("***@***", "XYZ")
if api.requires_2fa:
print("Two-factor authentication required. Your trusted devices are:")
devices = api.trusted_devices
for i, device in enumerate(devices):
print(
" %s: %s"
% (i, device.get("deviceName", "SMS to %s" % device.get("phoneNumber")))
)
device = click.prompt("Which device would you like to use?", default=0)
device = devices[device]
if not api.send_verification_code(device):
print("Failed to send verification code")
sys.exit(1)
code = click.prompt("Please enter validation code")
if not api.validate_verification_code(device, code):
print("Failed to verify verification code")
sys.exit(1)
i = 0
#permet d'obtenir l'id de votre device
for c in api.devices:
print("%d :%s" % (i,c))
i = i+1
iphone_loc = {}
#remplacer 16 par l'id voulu
iphone_loc = api.devices[1].location()
location = "%s,%s" % (iphone_loc['latitude' ] , iphone_loc['longitude'])
print(location)
#url du device geotrav
url = "%s%s" % ("https://jeedom.XYZ.ovh/plugins/geotrav/core/api/jeeGeotrav.php?apikey=ABCD&id=644&value=",location)
print(url)
requests.get(url)
Vu que ce script n'a jamais été modifié en 2 ans, et qu'il a toujours fonctionné, je ne comprends pas pourquoi, d'un coup, j'ai ce message d'erreur... Donc je me tourne vers les pros du code. Voyez vous une anomalie quelque part ?
Merci à tous !
Macintosh / Safari 15.6.1
A voir également:
- Indexerror: replacement index 2 out of range for positional args tuple
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Supercopier 2 - Télécharger - Gestion de fichiers
- Av out - Forum Audio
- Index téléphonique - Guide
- Cmdl cache out of memory ✓ - Forum jeux en ligne
Je valide cette explication. Il te reste donc juste à comprendre pourquoi api.trusted_devices est vide.
Quoi qu'il en soit, le code devrait contrôler si l'index device est valide, en particulier quand la liste devices est vide.
Une adaptation possible de ton code :
if not devices: raise RuntimeError("No device found!") device_ok = False while not device_ok: device = click.prompt("Which device would you like to use?", default=0) device_ok = (0 <= device < len(devices)) if not device_ok: print(f"Invalid device: valid values are between 0 and {len(devices)}") device = devices[device]Bonne chance