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 :

Erreur d'execution incomprise


Sujet :

Réseau/Web Python

  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut Erreur d'execution incomprise
    Bonjour,

    J'ai un programme, qui examine périodiquement une page web pour voir si elle a changé, qui a planté avec le compte rendu d'erreur suivant:

    18:40:00 10/12/2007
    18:50:00 10/12/2007
    19:00:00 10/12/2007
    19:10:00 10/12/2007
    Traceback (most recent call last):

    File "E:\Python\Essais Python\watch.py", line 634, in <module>
    sock = urllib.urlopen(url)

    File "E:\Python\Essais Python\urllib.py", line 82, in urlopen
    return opener.open(url)

    File "E:\Python\Essais Python\urllib.py", line 190, in open
    return getattr(self, name)(url)

    File "E:\Python\Essais Python\urllib.py", line 334, in open_http
    return self.http_error(url, fp, errcode, errmsg, headers)

    File "E:\Python\Essais Python\urllib.py", line 351, in http_error
    return self.http_error_default(url, fp, errcode, errmsg, headers)

    File "E:\Python\Essais Python\urllib.py", line 608, in http_error_default
    return addinfourl(fp, headers, "http:" + url)

    File "E:\Python\Essais Python\urllib.py", line 951, in __init__
    addbase.__init__(self, fp)

    File "E:\Python\Essais Python\urllib.py", line 898, in __init__
    self.read = self.fp.read

    AttributeError: 'NoneType' object has no attribute 'read'

    >>>


    A part que c'est dans l'exécution du module urllib qu'a eu lieu l'erreur, je ne comprends rien de rien.
    Deux choses m'intriguent:
    - pourquoi plusieurs lignes de urllib sont-elles citées ?
    - qu'est ce que c'est que ce nom d' opener (ligne 82 d'urllib) qui semble etre un nom de module mais que je ne trouve pas dans la Python Library Reference ?

    Qui peut me fournir quelques indications pour comprendre quelle est la nature de l'erreur qui a eu lieu dans l'execution de mon programme ?

    Merci pour toute reponse

  2. #2
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Citation Envoyé par eyquem Voir le message
    A part que c'est dans l'exécution du module urllib qu'a eu lieu l'erreur, je ne comprends rien de rien.
    Deux choses m'intriguent:
    - pourquoi plusieurs lignes de urllib sont-elles citées ?
    C'est la pile d'appels conduisant à l'erreur. Dans watch.py, par urllib.urlopen(url), vous lancez un processus dans urllib.py. Ce processus d'appel en appel, arrive à une AttributeError, certainement self.fp à None. Ce qui n'est pas normal, contrairement à par exemple une exception IOError. Je suppose que vous traitez dans watch.py par try...except cette IOError, pour le cas de la page web non accessible.

    - qu'est ce que c'est que ce nom d' opener (ligne 82 d'urllib) qui semble etre un nom de module mais que je ne trouve pas dans la Python Library Reference ?
    Sans importance. C'est une variable locale à une fonction de urllib.py, il vous suffit de regarder ce fichier.

    Qui peut me fournir quelques indications pour comprendre quelle est la nature de l'erreur qui a eu lieu dans l'execution de mon programme ?
    Une chose m'étonne, c'est que votre urllib.py est dans le répertoire de votre projet. Pourquoi ne pas utiliser celui de votre distri Python ?
    Une hypothèse serait que la version de ce fichier ne soit pas en accord avec celle de la distri Python. Un rapide coup d'oeil aux versions 2.3.4 et 2.5 de urllib.py montre des différences assez intéressantes dans des zones qui pourraient bien être concernées par l'erreur.

    N'oubliez pas de prévoir des tests pour par exemple vérifier le comportement en cas d'échec de connexion, sans attendre que ça se produise spontanément...

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut Remerciement pour la reponse
    Je n'arrive pas a trouver le temps pour donner suite a votre interessante reponse.
    Je poste simplement pour vous remercier d'avoir pris la peine de cette reponse developpee.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut À Pierre Maurette
    Grâce à votre réponse parlant de pile d'appels, je suis revenu sur le message d'erreur et j'ai compris ce qui m'avait empêché de comprendre cette succession de références en cascade:

    - jusqu'à présent, je n'ai fait que des programmes simples dont les messages d'erreur n'allaient pas au delà d'une seule réference dans une fonction ou un module. Et là paf, j'ai eu 8 références d'un coup

    - l'enchaînement de la pile d'appels n'est pas évident à décortiquer et j'ai l'impression que lorsque la cascade passe par des objets définis par recours à une classe, c'est encore moins clair. Je n'ai pas réussi à remonter la pile au delà de
    File "E:\Python\Essais Python\urllib.py", line 190, in open
    return getattr(self, name)(url)
    Je ne comprends pas ce qu'est open_http dans l'appel suivant.

    - devoir remonter sur 8 niveaux dans les tréfonds de urllib me semble suspect et votre réponse me confirme que cette erreur a quelque chose de bizarre.
    Je me demande si cette erreur n'est pas survenue à un moment où j'avais bidouillé urllib pour essayer de résoudre un autre problème sur lequel je pose par ailleurs une autre question.

    Mais j'ai arrêté ce bricolage et cette erreur ne s'est pas du tout reproduite.
    Je ne vais donc pas perdre mon temps à essayer de comprendre en détail cette erreur car j'en ai une autre qui, elle, se répète.


    Ceci dit,

    - je traite effectivement dans un bloc "try .... except IOError" l'ouverture la page web.

    - la présence de urllib dans le répertoire de mon programme ne se justifie en effet pas puisqu'après avoir éliminé ce module de ce répertoire, le programme tourne encore, Python étant installé dans ma partition C:

    - je ne pratique Python que depuis le début 2007. Je n'ai donc jamais utilisé une autre version que Python 2.5

    Merci d'avoir examiné ma question avec attention.

Discussions similaires

  1. erreur d'execution 3704, ...:objet n'est pas ouvert
    Par cari dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/11/2005, 15h44
  2. [ERREUR D'EXECUTION] Segmentation Fault
    Par CestPasMoi dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 17h38
  3. Réponses: 3
    Dernier message: 03/11/2005, 18h41
  4. [LDAP][Interface Winldap.h] Erreur d'execution
    Par -=Spoon=- dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 10/03/2005, 17h10
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

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