Résolue

Exercice raise ValueError (fonction)

# Fonctions # Résolution d'erreurs # Variables

Gabriel Trouvé

Mentor

Et rebonjour,


Je suis à l'exercice :

"Dans cet exercice, vous devez créer une fonction add qui va permettre d’additionner 2 nombres et de retourner le résultat de cette addition.

Petite contrainte supplémentaire : votre fonction ne doit accepter que des nombres.

Dans le cas où un objet d’un autre type est envoyé, la fonction devra lever une erreur de type ValueError."


Si je fais de cette manière : la fonction lève bien l'erreur mais je ne valide pas la consigne "La fonction add retourne le résultat de l’addition des 2 valeurs passées en argument"


J'ai essayé de mettre mon return a + b au début mais cette fois-ci je ne lève plus l'erreur...


je n'aime pas regarder la solution je préfère réfléchir quitte à avoir de l'aide.


Merci d'avance :)

def add(a, b):
    
    if a is not int:
        raise ValueError
    elif b is not int:
        raise ValueError
    return a + b

Gabriel,


Si tu as déjà vu la méthode isinstance(), tu peux essayer ce code :

def add(a, b):
    if not isinstance(a, int):
        raise ValueError
    if not isinstance(b, int):
        raise ValueError
    return a + b

Gabriel Trouvé

Mentor

Déjà j'ai corrigé de cette manière.

"Mais je ne valide tjs pas la consigne : La fonction add retourne le résultat de l’addition des 2 valeurs passées en argument"



def add(a, b):
    
    if a is not int or b is not int:
        raise ValueError
    return a + b

Sinon en restant dans la même optique toi, tu peux écrire ceci :


def add(a, b):
    if type(a) is not int:
        raise ValueError
    elif type(b) is not int:
        raise ValueError
    return a + b

Je crois qu'il faut tester le type des variables et pas la variable elle même


essayes avec

type(a) is not int

Gabriel Trouvé

Mentor

Effectivement ça fonctionne ! Merci ! :)


Donc on ne peut pas tester la variable mais il faut tester le type.

Je pensais qu'en testant la variable elle-même ça fonctionnait.

En fait, si je ne me trompe pas, si tu fais

add(5, 3)

a=5 et b=3

Du coup, 5 est différent int alors type(a) est égale à int


J'espère être assez clair

Gabriel Trouvé

Mentor

Alors je vais être chiant.

Mais c'est pour être précis et bien comprendre.

Les 2 fonctionnent dans la correction.


On peut faire ?

def add(a, b):
    if not isinstance(a, (float, int)) or not isinstance(b, (float, int)):
        raise ValueError("a et b doivent être des nombres (entiers ou décimaux).")
    return a + b



Ici on termine la ligne avec le if avec 3 virgules pour fermer. Je trouve ça bizarre.

def add(a, b):
    if not isinstance(a, (float, int) or not isinstance(b, (float, int))):
        raise ValueError("a et b doivent être des nombres (entiers ou décimaux).")
    return a + b

Bizarre que la 2ème proposition fonctionne

Chez moi, ça me retourne une erreur de type TypeError: unsupported operand type(s) for +: 'int' and 'str'

Alors qu'on devrait lever une erreur de type ValueError

Gabriel Trouvé

Mentor

C'est bon je viens d'essayer sur VS code et là ça me retourne une erreur. Merci je clôture :)

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.