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

Python Discussion :

Incrompréhension exception OSError


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Par défaut Incrompréhension exception OSError
    Bien le bonjour braves gens,

    Je suis en train de créer un script pour des non-programmeurs du coup j'essaye de gérer un maximum de bugs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # Handling of end lines format (Unix: \n, Mac: \r, Windows: \r\n)
    try:
    	subprocess.Popen('sed -i \'s/\\r\\n/\\n/g\' ' + sys.argv[1], shell=True, stdout=subprocess.PIPE)
    	os.system('sed -i \'s/\\r/\\n/g\' ' + sys.argv[1])
    except OSError:
    	sys.exit('\n ERROR: Sed did not find the input file')
     
    # Opening of the input file
    try:
    	file_in = open(sys.argv[1], 'r')
    except IOError:
    	sys.exit('\n ERROR: The input file does not exist)

    Il y a un truc qui me chiffonne car je ne comprends pas pourquoi, lorsque le fichier input en argument est inexistant, l'exception OSError n'est pas affichée. En lieu de çà, il m'affiche la stderr de sed : "sed: can't read input.txt: No such file or directory" !
    J'ai testé avec subprocess.Popen, os.popen et os.system, mais toujours la même incompréhension. Il y a toujours le moyen barbare de virer le message d'erreur avec "2> /dev/null"... Mais çà ne m'explique pas le pourquoi de la chose !

    Si quelqu'un à la solution, merci de m'en faire part !

    Picui

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 14
    Par défaut
    A mon avis ça veut simplement dire que sed ne génère pas une erreur au niveau de l'OS quand il ne peut pas ouvrir un fichier.
    Le stderror tu reçoit directement de sed et pas de l'OS

    Rony

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 : 21 741
    Par défaut
    Heu...

    Citation Envoyé par Rony22 Voir le message
    A mon avis ça veut simplement dire que sed ne génère pas une erreur au niveau de l'OS quand il ne peut pas ouvrir un fichier.
    Le stderror tu reçoit directement de sed et pas de l'OS
    Dit autrement, pour générer l'exception OSError il faut faire un "raise OSError" dans le contexte d'exécution du script python.

    Quand on fait os.system("sed..."), on crée un nouveau contexte avec lequel on échange des chaines de caractères par des pipe stdout, stderr,... et on n'a peut être même pas la valeur de retour de sed...

    Ceci dit, je ne vois pas trop l'intérêt de convertir les fins de lignes: Python sait gérer cela tout seul non? Si ce n'est pas le cas, file = open(fichier, 'rU') force la lecture en mode "Universel" - qui est normalement "par défaut", sauf si on s'amuse à lire en "binaire" -.

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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Par défaut
    Ceci dit, je ne vois pas trop l'intérêt de convertir les fins de lignes: Python sait gérer cela tout seul non?
    Eh bien pas dans mon cas en tout cas, il gère les retours chariot Unix et Windows mais lorsque je fais un f.readlines() avec les retours chariots \r, il lit le fichier comme une seule ligne. Pas très pratique à parser par la suite ! Du coup, j'étais obligé de parser dans un premier temps avec sed !

    Si ce n'est pas le cas, file = open(fichier, 'rU') force la lecture en mode "Universel" - qui est normalement "par défaut", sauf si on s'amuse à lire en "binaire"
    Super cette option, python arrive à gérer les fins de lignes, qu'importe le format Unix, Mac ou Windows. Merci beaucoup, tu me simplifies la vie !

    PS : non je ne lis pas en binaire !

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 : 21 741
    Par défaut
    Citation Envoyé par PicuiPicui Voir le message
    Super cette option, python arrive à gérer les fins de lignes, qu'importe le format Unix, Mac ou Windows. Merci beaucoup, tu me simplifies la vie !
    Ben çà fonctionne pour moi et ce mode est "documenté" dans le PEP 0278.

    Vérifiez que cela fonctionne, avant de crier youpi...
    Vous êtes peut être dans un cas d'utilisation "tordu".

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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Par défaut
    Avant de poster, j'avais d'abord testé l'option 'U' et çà marchait d'où le 'Youpi' !!!

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

Discussions similaires

  1. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  2. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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