Contenu de cette Foire aux questions

Cette Foire Aux Questions (FAQ) regroupe un ensemble d’échanges entre un apprenant qui a un souci dans une partie du cours ou dans la résolution d’un exercice UpyLaB et l’équipe pédagogique.

Nous avons bien sûr anonymisé les apprenants en leur donnant un prénom d’emprunt.

Pour chaque exercice UpyLaB, cette FAQ regroupe également les erreurs fréquemment rencontrées dans les codes, leur explication et des conseils pour les éviter. Chaque partie reprend les erreurs dues aux nouveaux concepts vus dans ce module.

Pour ne pas se répéter, quand une erreur se rencontre dans plusieurs exercices, nous ne la répertorions généralement que dans le premier exercice UpyLaB où elle apparait.

Pour plus de clarté, les codes sont parfois précédés en début de chaque ligne par le numéro de la ligne (comme donné par PyCharm ou UpyLaB) et, sous la ligne erronée, le caractère ^ précise l’endroit où l’erreur a lieu.

Enfin, cette FAQ débute par des remarques globales sur l’utilisation des trois outils préconisés dans ce MOOC. D’autres parties de la FAQ y seront consacrées, en particulier dans la FAQ du module 1 si ces parties sont liées à des soucis d’installation.

Utilisation de PyCharm, Python Tutor et UpyLaB

Cette section contient des remarques globales sur l’utilisation des 3 outils préconisés ou utilisés dans ce MOOC : PyCharm, Python Tutor et UpyLaB.

PyCharm

Vous avez installé et créé un projet dans PyCharm, voyons comment créer et exécuter un script.

Un projet peut contenir plusieurs scripts bien sûr. Soit qui sont liés (c’est le cas dans les gros projets réels) soit qui sont indépendants mais appartiennent à une même famille… c’est le cas par exemple si je décide de faire un projet par Module de mon MOOC : je mettrai dans le projet Module_1 tous mes exercices du Module 1 etc. On peut aussi faire un gros projet MOOC_Python et y mettre tous ses scripts sans distinction de module.

Cette organisation est bien sûr question de goût, d’habitude de travail et donc propre à chacun.

Lorsque votre projet est créé, pour y ajouter un nouveau script vous pouvez utiliser un clic droit sur le nom du projet, dans la colonne de gauche et faire New > Python File. Vous donnez un nom à ce script qui vient se rajouter aux autres. Dans la colonne de gauche vous avez l’ensemble des scripts. Ainsi, les deux captures suivantes montrent comment j’ai créé un nouveau script nommé test_2.py.

Création d'un nouveau script dans PyCharm
Création d'un nouveau script dans PyCharm (suite)

Parmi tous les scripts de votre projet, pour en exécuter un, il y a deux cas de figure :

  1. soit il est sélectionné comme script courant (il apparaît en haut à droite avec la petite flèche verte) auquel cas utiliser cette petite flèche ou faire Run dans le menu exécutera ce script ;

  2. soit il ne l’est pas et alors le plus simple est de faire, dans la colonne de gauche, un clic droit sur le nom du script que vous voulez exécuter (disons test_2.py comme sur la capture ci-dessous) et choisir dans le menu contextuel Run test_2

Exécution d'un script test_2 dans PyCharm

Et les scratch file ?

Les scratch files sont des fichiers python comme les autres mais numérotés automatiquement et rangés dans un dossier (projet) à part. Par exemple ci-dessous j’ai créé un nouveau scratch file, (ce n’est pas mon premier comme l’atteste le 2 dans le nom) et il n’apparaît pas dans mon Projet (qu’on voit à gauche). Mais si je fais apparaître le menu contextuel en cliquant-droit sur le nom scratch_2.py, je vois que j’ai un Run scratch_2 et je peux donc l’éxecuter.

Exécution d'un script dans un fichier scratch dans PyCharm

Conseil

De préférence, créez des fichiers python dans votre ou vos projets et de n’utilisez pas les scratch files de peur de ne plus savoir où se trouvent vos codes.

SyntaxError dans mon code

Si vous avez un message syntax error dans PyCharm qui indique par exemple la ligne suivante :

print(long*sin(pi/3), long*cos(pi/3))

    ^

SyntaxError: invalid syntax

en fait l’erreur se situe généralement à la ligne ou l’instruction précédente.

Vérifiez donc par exemple vos parenthèses, …

Ici j’avais par exemple comme code:

from math import pi, cos, sin
long = float (input())
print(long, 0.0
print(long*cos(pi/3), long*sin(pi/3))

et c’est la parenthèse manquante du premier print qui a créé l’erreur.

PythonTutor

Emile

Bonjour,

PythonTutor ne parvient pas à exécuter mon code alors que celui-ci fonctionne sur ma machine.

Merci.

Réponse de l’équipe

Bonjour,

Vérifiez que vous utilisez la bonne version de Python (en l’occurrence la 3.6) dans PythonTutor.
PythonTutor - Sélection de la bonne version Python

L’équipe.

UpyLaB

Problème d’accès à UpyLaB

Avant tout, il est toujours prudent que vous conserviez vos codes des exercices UpyLaB, pour éviter les pertes éventuelles (soyons toujours prudent).

Lors de la première session, des soucis d’accès à UpyLaB ont été observés (la fenêtre reste bloquée sur le message « Connexion en cours … « , ou « test en cours »); l’outil a été amélioré depuis.

Si ce souci apparait, sauvez votre code et demandez de rafraîchir la page.

Si le problème persiste, réessayez un peu plus tard et en attendant de pouvoir valider vos solutions, faites vos exercices localement sur PyCharm par exemple. Les énoncés UpyLaB sont accessibles dans le support de cours fourni.

Sinon, si vous débutez avec ce MOOC et UpyLaB, le souci est peut-être lié à votre navigateur, à sa configuration ou à une extension comme ghostery qui bloque les interactions avec UpyLaB. Des soucis ont été évoqués avec les navigateurs: Safari, Firefox, Chromium et Microsoft Edge.

Pour ce genre de soucis, voici des conseils trouvés dans le forum :

Bonjour,

  1. j’ai eu le souci sous safari, je suis donc passée à Google Chrome et tout fonctionne bien maintenant.

  2. J’utilise le plugin « noscript » avec Firefox, il faut faire attention à autoriser les domaines fun-mooc.fr ET ulb.ac.be, sinon, on a également le message « Connexion en cours … » de manière permanente.

  3. J’utilise également Firefox (à jour) agrémenté de NoScript et ABP. J’ai rencontré le problème de connexion à UpyLaB et l’ai résolu en cliquant à gauche de la barre d’url (icône bouclier / cadenas) puis en sélectionnant « Désactiver le blocage ».

  4. J’utilise Firefox avec un bloqueur, et il est exact qu’avec un bloqueur de pub cela ne fonctionne pas correctement.

  5. Il faut en effet que le navigateur accepte les pop-ups

  6. Pour les utilisateurs de Firefox paramétré pour bloquer les cookies tiers, il faut aller dans ajouter une exception pour autoriser https://upylab.ulb.ac.be. Préférences - Vie privée et sécurité - Gérer les permissions - mettre https://upylab.ulb.ac.be dans le champs Adresse du site web

    • Autoriser - Enregistrer les modifications. Recharger la page et upylab juste marche :-) Cette solution fonctionne sous Chromium,

  7. Si vous utilisez ghostery, il faut mettre « site de confiance » pour que cela fonctionne.

UpyLaB me dit que mon code est faux !

Voici quelques astuces pour déboguer votre code.

Faites toujours attention aux espaces, tabulations, nouvelles lignes. Ces caractères ne sont pas visibles pour l’humain, mais UpyLaB les voit ! Un espace en trop ou une majuscule à la place d’une minuscule sont des erreurs fréquentes ! En effet, « Bonjour! », « Bonjour ! », « bonjour! » sont tous des textes différents!

Supposons qu’UpyLaB vous demande d’écrire n caractères '+' sur une ligne après avoir lu l’input n et que votre code soit

n = int(input())
print('+'*n)
print()   # ici j'imprime malheureusement une ligne de trop  !

Comment faire pour voir l’erreur.

Utilisez Python Tutor

Premier conseil : si votre code ne contient pas de module comme turtle…, utilisez Python Tutor comme expliqué en section 1.5 en cliquant sur le texte « Visualize your code and get live help now » et en explicitant que le code est écrit en python 3.6.

UpyLaB me dit Le code comprend des erreurs: Ligne 15: Erreur de syntaxe

  • Mais la ligne 15 et 14 sont parfaitement syntaxiquement correctes ou pire, mon code fait moins de 15 lignes. Des lignes sont parfois ajoutées à votre code pour permettre à UpyLaB de le tester. Donc votre erreur est peut-être quelques lignes avant.

  • Attention aussi à la version de Python utilisée par UpyLaB : pour la session actuelle il s’agit de Python 3.5.3 qui ne permet pas encore les f-strings introduit avec Python 3.6.

UpyLaB me donne le message:

Erreur serveur: Votre programme a planté ou a duré trop longtemps. Vérifiez que vos boucles terminent.

L’exécution de votre fonction boucle probablement indéfiniment, comme l’exécution de celle-ci :

def ma_fonction_qui_cycle(n):
    while True:
        pass

UpyLaB me dit le message : Ligne 13 « EOF » when reading a line

Si vous recevez d’UpyLaB le message « EOF when reading a line », cela signifie que UpyLaB a testé votre code et que ce dernier demande un input quand en fait UpyLaB a donné tout ce qu’il devait.

EOF signifie « end of file » : ici plus de données fournie en entrée (input).

Donc votre code fait au moins un input() en trop.

Attention, comme des lignes de code sont ajoutées par l’outil UpyLaB pour tester votre code, l’input() n’est souvent pas à la ligne mentionnée mais plutôt quelques lignes avant (n’oubliez pas qu’UpyLaB n’est pas un outil de débogage ; il ne fait que valider si votre code est conforme à ce qui est requis).

Autre astuce si mon code semble imprimer le texte demandé

Si vous voulez deboguer votre code dans PyCharm (ou UpyLaB), une astuce est d’ajouter à chaque print un caractère particulier pour voir où est la fin de la ligne

Ici :

n = int(input())
print('+'*n + '€')  # ajoute un caractère '€' en fin de ligne
print('€') # idem

ou mieux, en utilisant l’argument end du print

n = int(input())
print('+'*n, end = "€\n")  # ajoute un caractère '€' en fin de ligne
                           # suivi  du  passage à la ligne
print(end = "€\n")         # imprime juste le paramètre end

Le résultat de l’exécution avec n valant 5 sont les deux lignes

+++++€
€

ce qui met en évidence que votre code a une ligne en trop ! Après avoir corrigé, enlevez les '€' et tester votre code sur UpyLaB.

Puis-je mettre mon code dans le forum ?

Comme précisé dans les règles du forum, aucune partie substentielle ou complète de code solution d’un exercice UpyLaB noté ne peut être diffusée. Par contre, vous pouvez décrire précisément les erreurs renvoyées par UpyLaB et même mettre des captures d’écran de ces messages. Sachez que l’équipe pédagogique a accès au dernier code soumis en cas de besoin.

Pourquoi UpyLaB valide le code complet mais pas ma fonction !

Dans les exercices UpyLab 4.1 à 4.4, nous vous demandons la définition de fonctions ET le code qui appelle cette fonction et imprime des résultats.

Certains d’entre vous peuvent avoir le code complet validé par UpyLaB mais pas le test UpyLaB sur la fonction elle-même.

Le souci probable est que vous n’avez pas bien appliqué le mécanisme de passage de paramètres.

Dans ce cas, nous vous invitons à bien voir ou revoir la matière sur les fonctions et en particulier la notion de paramètres formels, paramètres effectifs et la transmission de l’un à l’autre lors de l’appel.

Dans les exercices UpyLaB 4.1 à 4.4, le code de vos fonctions ne doit rien utiliser d’autre que leurs paramètres formels et les variables locales qui y sont définies !