Résolue

Gestion des erreurs dans la fonction get_city_population

# Python # Gestion des erreurs

bonjour,
j'ai un petit souci avec une de mes applications, je suis entrain d'écrire un algorithme qui doit me renvoyer certains éléments sauf que je n'ai pas le retour escompté. je met mon code ici afin de voir où est-ce que j'ai mal ecris.

def get_city_population(population,city):
       city_populations = {"New York": 8336817, "Los Angeles": 3979576, "Chicago":2679044}
       if city in city_populations:
           try:
               raise KeyError()
           except KeyError:
               print(f"city {city} is not in population data"}
       return populations

En fait j'ai deux cas en exemple, dans un premier cas on entre une mauvaise ville ça devrait me renvoyer une erreur (quand on entre par exemple Tampas). et dans le second cas lorsqu'on rentre New York, ça me renvoie la valeur de la clé.

Merci.

Gabriel Trouvé

Mentor

Salut,

En fait si la clé est trouvée, tu lève une exception, et tu retournes populations avec un 's'. Et tu peux te passer du paramètre population.

Tu ne voudrais pas faire ça plutôt ?

def get_city_population(city):
    city_populations = {"New York": 8336817, "Los Angeles": 3979576, "Chicago": 2679044}

    result = city_populations.get(city)
    if result is None:
        print(f"city {city} is not in population data")
    return result

Bonjour Gabriel,
Excuse moi de revenir vers toi une fois de plus je pense que je ne t'ai pas bien exposé la tâche, en gros il est demandé d'écrire une fonction python nomméé get_city_population qui prend en compte deux paramètres.

  • populations un dictionnaire représentant les populations des villes.

  • city une chaîne de caractères représentant le nom de la ville.

  • La fonction doit :

  • renvoyer la population de la ville spécifiée si elle est trouvée dans le dictionnaire.

  • générer un message d'erreur cair(KeyError) si la ville n'est pas trouvée.

  • utiliser un try-except à l'intérieur de la fonction pour gérer le KeyError avec un message d'erreur personnalisé.
    Conseils:
    Utiliser raise KeyError() pour lever explicitement l'exception avec votre message d'erreur personnalisé
    N'utiliser pas d'indications de type lors de la déclaration de la fonction.
    Exemple 1:
    city_name = "Tampas"
    cette fonction devrait produire un KeyError indiquant que la ville de "Tampas n'a pas été trouvé dans les données de population
    Exemple 2
    city_name = "New York"
    population de la ville devrait apparaître puisque c'est la valeur de la clé "New York".

Voilà un peu la tâche qui m'est exigée et voici le code que j'ai revisité et proposé:

def get_city_population(populations, city):
city_populations = {"New York": 8336817, "Los Angeles": 3979576, "Chicago": 2679044}
result = city_populations.get(city)
if result is none:
raise KeyError(city)
print(f" city {city} is not in population data.")
try:
population = city_populations[city]
print(f"city {city} is not in population data")
return populations
except KeyError:
print(f"city {city} is not in population data")
return none

le resultat qui m'est retourné sur mon application est : ***Error in grading script. See raw output log for details***
Merci beaucoup.

Gabriel Trouvé

Mentor

Ah donc tu pourrais te faire une simple fonction avec un message d'erreur perso :

def get_city_population(populations, city):
    try:
        population = populations[city]
        return population
    except KeyError:
        raise KeyError(f"city {city} is not in population data")

Bonjour Gabriel,

Merci pour ton aide, je suis parti trop loin dans ma formulation et pourtant ce n'était pas aussi long qu'il semblait

cordialement

Gabriel Trouvé

Mentor

Pas de soucis :)

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.