Exception dans un IF

Résolu
biche_35 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour,
Je suis un peu embêter sur un programme que je cherche à faire...

J'ai une boucle de cette forme :

for addresses in bigip1_obj.get_list():
 s_addresses = str(addresses)[8:]
 g_list = bigip1_obj.get_traffic_group(virtual_addresses = [s_addresses])
 s_liste = str(g_list)
 if (s_addresses[10:] > 128 and s_liste[-2] == '1'):
  print ("Pour la virtuelle portant l'IP %s, le traffic group correspondant n'est pas bon" %(s_addresses))
 else:
  print("Pour la virtuelle portant l'IP %s, le traffic group correspondant est bon" %(s_addresses)) 
</code>

Actuellement ce script fonctionne nikel hors mis dans une situation. Quand ma boucle va tourner, il tombera une seul fois sur addresses ='any'.
Cela provoque un problème car any ne contient pas 8 caractère (str(addresses)[8:]).


Je possède donc une erreur de ce type : IndexError: string index out of range

Avez vous une idée pour gérer ce 'any'

Merci d'avance de vos conseils




13 réponses

Utilisateur anonyme
 
try:
s_addresses = str(addresses)[8:]
except IndexError:
# traitement au cas où on a le terme 'any'
0
biche_35 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,
Merci de ton aide déjà ;)

Voci donc ma nouvelle boucle aprés modification :
for addresses in bigip3_obj.get_list():
	try:
		s_addresses = str(addresses)[8:]
	except IndexError:	
			g_list = bigip3_obj.get_traffic_group(virtual_addresses = [s_addresses])
			s_liste = str(g_list)
	print s_addresses[7]
	if (s_addresses[7] == '2' and s_liste[-2] == '2' and s_addresses != 'any'):
		print ("Pour la virtuelle portant l'IP %s, le traffic group correspondant n'est pas bon" %(s_addresses))
	else:
		print("Pour la virtuelle portant l'IP %s, le traffic group correspondant est bon" %(s_addresses))


Mon traitement commence et au bout de la 5ème valeur de s_adrdresses, j'ai le message d'erreur suivant :
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NameError: name 's_liste' is not defined

Un problème d'indentation peut ètre??
Encore merci
0
Utilisateur anonyme
 
Non, c'est un problème dans le sens où tu crées ta variable s_liste que dans le cas où tu vois la valeur 'any'.

La solution est de placer avant le try ta variable s_liste à la valeur None

s_liste = None
try:
# ....
0
biche_35 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Donc tu suggère de faire ça :
for addresses in bigip3_obj.get_list():
        s_liste = 'None'
 try:
  s_addresses = str(addresses)[8:]
 except IndexError: 
   g_list = bigip3_obj.get_traffic_group(virtual_addresses = [s_addresses])
   s_liste = str(g_list)
 print s_addresses[7]
 if (s_addresses[7] == '2' and s_liste[-2] == '2' and s_addresses != 'any'):
  print ("Pour la virtuelle portant l'IP %s, le traffic group correspondant n'est pas bon" %(s_addresses))
 else:
  print("Pour la virtuelle portant l'IP %s, le traffic group correspondant est bon" %(s_addresses))


Je test et je te tiens au courant.
Encore merci ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
biche_35 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Malheureusement, je retombe sur mon problème initial avec un "IndexError: string index out of range" lorsque s_addresses = any
0
Utilisateur anonyme
 
Tu as vraiment un problème avec l'indentation :)

for addresses in bigip3_obj.get_list():
s_liste = 'None'
try:
s_addresses = str(addresses)[8:]
except IndexError:
g_list = bigip3_obj.get_traffic_group(virtual_addresses = [s_addresses])
s_liste = str(g_list)
print s_addresses[7]
if (s_addresses[7] == '2' and s_liste[-2] == '2' and s_addresses != 'any'):
print ("Pour la virtuelle portant l'IP %s, le traffic group correspondant n'est pas bon" %(s_addresses))
else:
print("Pour la virtuelle portant l'IP %s, le traffic group correspondant est bon" %(s_addresses))

Non testé, mais ça a déjà plus de gueule...
0
biche_35 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Effectivement, je suis encore un peu débutant sous Pyhton (je commence depuis cette semaine :) )

Toujours le même problème. J'obtiens un IndexError: string index out of range.

Vois pas pourquoi ce str(addresses)[8:] est si bloquant que ça...
0
Utilisateur anonyme
 
Non il n'est pas bloquant à cet endroit, il faut que tu places dans ton bloc try, tous ce qui pourrait poser problème en rapport avec ton 'any'...

Je ferais cela de cette façon

for addresses in bigip3_obj.get_list():
s_liste = 'None'
try:
s_addresses = str(addresses)[8:]
print s_addresses[7]
if (s_addresses[7] == '2' and s_liste[-2] == '2'):
print ("Pour la virtuelle portant l'IP %s, le traffic group correspondant n'est pas bon" %(s_addresses))
else:
print("Pour la virtuelle portant l'IP %s, le traffic group correspondant est bon" %(s_addresses))
except IndexError:
g_list = bigip3_obj.get_traffic_group(virtual_addresses = [s_addresses])
s_liste = str(g_list)
# dans le cas d'any, on en fait quoi?
0
biche_35 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Dans le cas d'any, je propose qu'on ne fasse rien ;)
Je ne sais pas si ta question est directe ou si c'est juste un fail dans tes balises /code
0
biche_35 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Pour info, ça fonctionne ;)
Peux tu m'expliquer ce que tu fais aprés ton except IndexError:

Je ne connais pas trop la construction du try/except

Préfère comprendre plutôt que de faire un simple Copy/Cut
0
Utilisateur anonyme
 
Le bloc try-except, c'est pour dire

J'essaie
...
...
...
excepté dans le cas où l'index dépasse la taille de la chaine je fais
...
...
...

try -> essayé
except -> excepté
0
biche_35 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Et ben chapeau !!!
Merci de ton aide et de tes explications.

J'ai grâce à toi quelque chose qui fonctionne à merveille et j'ai accessoirement réussi à faire mon premier code Python (avec un peu d'aide) ;)


A bientôt pour une nouvelle question :D

Problème résolu
0
Utilisateur anonyme
 
A bientôt ;)
0