J'utilise BeautifulSoup et j'analyse certains HTML.
J'obtiens une certaine donnée de chaque HTML (en utilisant for boucle) et j'ajoute ces données à une certaine liste.
Le problème est que certains HTML ont un format différent (et ils ne contiennent pas les données que je veux en avoir) .
J'essayais donc d'utiliser la gestion des exceptions et d'ajouter de la valeur null
à la liste (je devrais le faire car la séquence de données est importante.)
Par exemple, j'ai un code comme:
soup = BeautifulSoup(links)
dlist = soup.findAll('dd', 'title')
# I'm trying to find content between <dd class='title'> and </dd>
gotdata = dlist[1]
# and what i want is the 2nd content of those
newlist.append(gotdata)
# and I add that to a newlist
et certains liens n'ont pas de <dd class='title'>
, alors je veux plutôt ajouter la chaîne null
à la liste.
L'erreur apparaît:
list index out of range.
Ce que j'ai essayé, c'est d'ajouter quelques lignes comme ceci:
if not dlist[1]:
newlist.append('null')
continue
Mais ça ne marche pas. Il montre toujours une erreur:
list index out of range.
Que dois-je faire à ce sujet? Devrais-je utiliser la gestion des exceptions? ou y a-t-il un moyen plus facile?
Aucune suggestion? Toute aide serait vraiment géniale!
La gestion de l'exception est la voie à suivre:
try:
gotdata = dlist[1]
except IndexError:
gotdata = 'null'
Bien sûr, vous pouvez aussi vérifier la len()
de dlist
; mais gérer l'exception est plus intuitif.
Vous avez deux options. soit gérer l'exception, soit tester la longueur:
if len(dlist) > 1:
newlist.append(dlist[1])
continue
ou
try:
newlist.append(dlist[1])
except IndexError:
pass
continue
Utilisez le premier s'il y a souvent n'est pas un deuxième élément, le second s'il y a parfois n'est pas un deuxième élément.
Un ternaire suffira. changement:
gotdata = dlist[1]
à
gotdata = dlist[1] if len(dlist) > 1 else 'null'
c'est un moyen plus court d'exprimer
if len(dlist) > 1:
gotdata = dlist[1]
else:
gotdata = 'null'
En prenant la référence de ThiefMaster ♦ nous obtenons parfois une erreur avec la valeur donnée comme '\ n' ou null et que nous effectuons la tâche requise pour gérer ValueError:
La gestion de l'exception est la voie à suivre
try:
gotdata = dlist[1]
except (IndexError, ValueError):
gotdata = 'null'
pour toute personne intéressée de manière plus courte:
gotdata = len(dlist)>1 and dlist[1] or 'null'
Mais pour de meilleures performances, je suggère d'utiliser False au lieu de 'null', alors un test d'une ligne suffira:
gotdata = len(dlist)>1 and dlist[1]
for i in range (1, len(list))
try:
print (list[i])
except ValueError:
print("Error Value.")
except indexError:
print("Erorr index")
except :
print('error ')