IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Programme qui plante à la lecture d'une URL


Sujet :

Réseau/Web Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    octobre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : octobre 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Programme qui plante à la lecture d'une URL
    Bonjour à toutes et tous,

    Depuis un moment je "coince" sur un problème tout bête : j'ai un serveur WEB sur une carte Arduino qui envoie un fichier HTML "basique". Je l'interroge via un programme Python. Tout fonctionne bien... sauf que le programme Python plante parfois ( tous les 2-3 jours alors que l'on interroge le serveur toutes les 10 minutes). L'interrogation se fait avec une Raspberry Py et j'ai cru que le problème était au niveau de la carte... mais je viens de faire des tests depuis le PC avec un code Python minimum (et en augmentant la cadence de lecture) et le problème subsiste. J'ai essayé de mettre une détection d'erreur avec un try... mais il plante toujours et ne signale rien. Lorsqu'il plante sur le PC (Spyder sous Windows) il faut restarter Spyder pour pouvoir reprendre la main.
    Voici le code en question, les prints ne sont là que pour savoir où il se plante... et je constate que c'est à l'ouverture de l'URL. De plus, je suis sûr que ce n'est pas mon serveur qui est HS car je peux accéder à l'URL en question depuis un navigateur lorsque le programme Python est planté.

    Est-ce que vous avez déjà eu ce type de problème... ou avez-vous des pistes à explorer... car là, moi je sèche...

    Merci d'avance pour votre aide !

    A+

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import urllib.request
    import time
     
     
    while(True) :
                #Lecture des paramètres piscine
                    try:
                        page=urllib.request.urlopen('http://192.168.1.113')
                        print("URL OK")
     
                    except:
                        print("erreur d'ouverture de la page")
     
                    else:
                        try:
     
                            strpage=str(page.read())
                            print(strpage)
                        except:
                            print("erreur de lecture de la page")
                        else:
                            time.sleep(10)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 669
    Points : 30 492
    Points
    30 492
    Par défaut
    Salut,

    Citation Envoyé par geraldhuguenin Voir le message
    Est-ce que vous avez déjà eu ce type de problème... ou avez-vous des pistes à explorer... car là, moi je sèche...
    Le propre de la programmation réseau est que les requêtes peuvent ne pas aboutir et qu'il faut gérer différents erreurs en fonction de leur type.
    note: ce qui veut dire regarder le type de l'erreur et non se contenter d'afficher erreur quelque soit son type.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2007
    Messages
    4 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : décembre 2007
    Messages : 4 102
    Points : 8 480
    Points
    8 480
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    En plus de regarder plus précisément le message d'erreur comme le dit wiztricks, regarde aussi si le plantage pourrait être provoqué par un "timeout" puisqu'il peut y avoir dans les réseaux des temps d'attente aléatoires.
    Éventuellement, met un timeout=10 (pour 10 secondes) à l'appel de urlopen, selon la doc:
    https://docs.python.org/fr/3/library...urllib.request

    Et voir ici pour une gestion plus fine des erreurs:
    https://stackoverflow.com/questions/...ut-in-python-3
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    octobre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : octobre 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci à vous deux pour vos pistes... j'essaye tout ça et vous redis !

    Bonne soirée

    A+

  5. #5
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    octobre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : octobre 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bien vu !!
    Il semble que ce soit le TIMEOUT. J'ai mis TIMEOUT = 10 et j'ai maintenant le message d'erreur "erreur d'ouverture de la page" qui apparaît quelques fois (il ne sortait jamais avant !)
    Je vais encore laisser tourner quelques heures pour être sûr... mais c'est bien parti !
    Merci encore et je vous redonne des nouvelles dans quelques temps

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 669
    Points : 30 492
    Points
    30 492
    Par défaut
    Citation Envoyé par geraldhuguenin Voir le message
    Il semble que ce soit le TIMEOUT. J'ai mis TIMEOUT = 10 et j'ai maintenant le message d'erreur "erreur d'ouverture de la page" qui apparaît quelques fois (il ne sortait jamais avant !)
    Pourquoi il semble? Le message d'erreur devrait l'indiquer.
    Et pour gérer un timeout, certes vous pouvez attendre plus longtemps (ce qui n'est pas une bonne idée puisque vous ne pouvez rien faire d'autre) mais vous pouvez aussi recommencer un peu plus tard.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    octobre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : octobre 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    "Il semble" car je sais par expérience qu'un problème peut en cacher un autre... donc tester et encore tester
    Effectivement on pourrait tester plusieurs fois... mais comme mon programme "passe son temps" à attendre... que ce soit là ou ailleurs... ça change rien

    Merci dans tous les cas pour les conseils... et la suite dans quelques jours. Pour l'instant le programme de base tourne sans problème... à suivre donc.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 669
    Points : 30 492
    Points
    30 492
    Par défaut
    Salut,

    Citation Envoyé par geraldhuguenin Voir le message
    "Il semble" car je sais par expérience qu'un problème peut en cacher un autre... donc tester et encore tester
    Vous avez un how-to Python qui vous explique comment attraper les exceptions UrlError et HTTPError remontées ainsi que les causes probables.

    La difficulté avec la programmation réseau est qu'on ne sait pas générer toutes les erreurs auxquelles le programme devra survivre: pas facile de tester dans ces conditions!
    Ce qui suppose avoir une trace des erreurs qui permettra d'avoir une idée de ce qu'il s'est passé et un traitement explicite de certaines erreurs...

    C'est ce qui fait qu'augmenter le timeout ne permet de réduire que les exceptions dues aux délais alors que ré-essayer la requête n secondes plus tard un certain nombre de fois prendra en charge beaucoup d'erreurs "temporaires".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    octobre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : octobre 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour ces conseils précieux... je vais regarder le tuto.
    Concernant les tests... je pensais simplement faire tourner le programme et voir s'il ne se plante plus... pour l'instant ça fonctionne.
    Pour le TIMEOUT... malheureusement je ne peux pas m'en passer... si je ne le mets pas, le programme plante et ne signale pas d'erreur... c'est d'ailleurs ça le principal problème. Mais je vais ajouter la capture d'erreur URL et HTTP à mon fichier log de façon à voir plus précisément ce qui se passe.

    Merci encore et toute bonne journée

  10. #10
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    octobre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : octobre 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Alors petite suite à cette histoire de plantée et d'absence d'erreur sans TIMEOUT :

    En analysant les codes d'erreurs généré par python (avec le TIMEOUT) on tombe sur ceci par exemple : https://github.com/psf/requests/issues/3353
    ... le problème est donc connu... j'ai pas fouillé plus loin puisque le TIMEOUT donne satisfaction.

    Je considère donc le problème comme résolu (enfin... plutôt... il y a une façon de contourner le problème... et ça me suffit )

    Merci à tous pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme qui plante quand je passe une string.
    Par z980x dans le forum SL & STL
    Réponses: 4
    Dernier message: 23/01/2009, 00h40
  2. Réponses: 2
    Dernier message: 05/07/2006, 15h21
  3. Faire un programme qui plante et noter le plantage
    Par cedricgirard dans le forum Langage
    Réponses: 9
    Dernier message: 22/03/2006, 16h36
  4. Réponses: 12
    Dernier message: 21/02/2006, 11h47
  5. Programme qui plante
    Par harris_macken dans le forum C++
    Réponses: 1
    Dernier message: 22/05/2005, 23h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo