J'essaie d'obtenir une sous-chaîne dans une boucle for. Pour cela, j'utilise ceci:

for peoject in subjects:
        peoject_name = peoject.content
        print(peoject_name, " : ", len(peoject_name), " : ",  len(peoject_name.split('-')[1]))

J'ai des projets qui n'ont pas de "-" dans la phrase. Comment puis-je y faire face?

Je reçois ce problème:

builtins.IndexError: list index out of range
1
SaCvP 17 avril 2018 à 14:13

3 réponses

Meilleure réponse

Vous pouvez simplement vérifier s'il y a un '-' dans peoject_name:

for peoject in subjects:
        peoject_name = peoject.content
        if '-' in peoject_name:
            print(peoject_name, " : ", len(peoject_name), " : ",  
                  len(peoject_name.split('-')[1]))
        else:
            # something else
0
hiro protagonist 17 avril 2018 à 11:21

Vous avez quelques options, selon ce que vous voulez faire dans le cas où il n'y a pas de trait d'union.

Sélectionnez le dernier élément du fractionnement via [-1] ou utilisez une instruction ternaire pour appliquer une logique alternative.

x = 'hello-test'
print(x.split('-')[1])   # test
print(x.split('-')[-1])  # test

y = 'hello'
print(y.split('-')[-1])                                 # hello
print(y.split('-')[1] if len(y.split('-'))>=2 else y)   # hello
print(y.split('-')[1] if len(y.split('-'))>=2 else '')  # [empty string]
0
jpp 17 avril 2018 à 11:26
for peoject in subjects:
    try:
        peoject_name = peoject.content
        print(peoject_name, " : ", len(peoject_name), " : ", len(peoject_name.split('-')[1]))
    except IndexError:
        print("this line doesn't have a -")
3
marc 17 avril 2018 à 11:39