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 :

serial.serialutil.SerialException: FileNotFoundError


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2020
    Messages : 25
    Par défaut serial.serialutil.SerialException: FileNotFoundError
    Bonjour,
    je suis entrain de concevoir un programme permettant de d'afficher des valeurs émis pour l'aduino sur python avec la librairie matplotlib, sauf que j'ai intégré un gestionnaire d'erreur afin d'avertir l'utilisateur lorsque l'arduino n'est
    pas connecté..... Ainsi j'ai commencé par afficher l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serial.serialutil.SerialException: could not open port 'com4': FileNotFoundError(2, 'Le fichier spécifié est introuvable.', None, 2)
    j'en es déduit que l'erreur qu'il fallait résoudre
    était FileNotFoundError donc dans mon code j'ai mis un excepet suivit d'un print pour afficher lorsque le port usb de l'arduino est brancher ou non... Mais le problème est que dès lors que ce dernier n'est pas branché le programme
    me renvoi rien à contrario de lorsque qu'il est branché ou le terminal m'affiche bel et bien que l'arduino est connecté.... Ma question est donc est ce que l'erreur à traité est bien FileNotFoundError ? Merci d'avance cordialement


    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    import serial
    from tkinter import *
    from matplotlib import pyplot as plt
    import matplotlib.animation as animation
    from matplotlib import style
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    from matplotlib.ticker import MultipleLocator, FormatStrFormatter
    from serial import SerialException
     
     
     
     
     
     
     
     
    def running():
        graphics = Toplevel()
        graphics.title("graphics")
        graphics.iconbitmap(r"index_FGQ_icon.ico")
        graphics.geometry("800x600")
     
     
     
     
        style.use('ggplot')
        f = plt.figure(figsize=(14,6.5), dpi=100)
        ax1 = f.add_subplot(111)
        arduino_Data = serial.Serial(port="com4",  baudrate=9600)
     
        try:
            arduino_Data = serial.Serial(port='com4', baudrate=9600)
        except SerialException:
            print("Port is already open")
        except FileNotFoundError:
            print("Port is not open")
     
        TempF = []
     
        def animate(i):
     
            arduino_String = arduino_Data.readline().decode("utf-8")
            data_array = arduino_String.split(',')
            temp = float(data_array[0])
            TempF.append(temp)
            plt.ylim(0, 30)
            ax1.plot(TempF,"r")
            ay = plt.axes()
            ay.yaxis.set_major_locator(MultipleLocator(1))
            ay.yaxis.set_minor_locator(MultipleLocator(0.5))
     
        canvas = FigureCanvasTkAgg(f, graphics)
        canvas.get_tk_widget().grid(column=1, row=1)
        ani = animation.FuncAnimation(f, func=animate, interval=1000, blit=False)
        ani.start()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    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 716
    Par défaut
    Salut,

    Si le port com4 n'existe pas, serial.Serial('com4') lève l'exception serial.serialutil.SerialException (une classe) avec dedans un message FileNotFoundError (du texte, pas une exception).

    Lancez l'interpréteur Python et jouez avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> import serial
    >>> try:
    ...    ser = serial.Serial('com3')
    ... except Exception as e:
    ...    s = e
    ...
    >>>
    Si le port existe, la création du port fonctionnera mais ne dira pas s'il y a quelque chose au bout ou pas. Pour çà il faut dialoguer avec la chose en question.
    note: en fait çà dépend du nombre de signaux fils qu'il y a entre les 2 machines.... mais si c'est un sujet c'est pas le bon forum.

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

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2020
    Messages : 25
    Par défaut
    J'ai essayé quelque chose mais je ne comprend pas pourquoi cela ne marche.... Je suis allé voir sur internet pour comprendre comment ajouter un exception pour FileNotFoundError et j'ai trouvé ça "
    exception FileNotFoundError

    Raised when a file or directory is requested but doesn’t exist. Corresponds to errno ENOENT.
    "


    Mais voilà cela ne marche pas et j'ai toujours le même message d'erreur



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        try:
            arduino_Data = serial.Serial(port='com4', baudrate=9600)
     
        except SerialException:
            print("Port is already open")
        except serial.serialutil.SerialException as error:
            if error == errno.ENOENT:
                print("no such file")

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    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 716
    Par défaut
    Salut,

    Attraper l'erreur permet au programme de trouver un palliatif ou de terminer avec un message d'erreur un peu plus compréhensible pour l'utilisateur...
    Mais çà ne corrige rien du tout...
    Après écrire du code demande de comprendre ce qu'on écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        try:
            arduino_Data = serial.Serial(port='com4', baudrate=9600)
     
        except SerialException:
            print("Port is already open")
        except serial.serialutil.SerialException as error:
            if error == errno.ENOENT:
                print("no such file")
    Comme on ne sait pas d'où sort SerialException, pourquoi serait-ce différent de serial.serialutil.SerialException?

    Si error est une instance de serial.serialutil.SerialException, impossible de le comparer à l'entier errno.ENOENT. (enfin on peut mais comme çà sera toujours différent, çà ne sert à pas grand chose).
    Si vous aviez testé un peu avant comme suggéré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> try:
    ...      serial.Serial(port='com4')
    ... except serial.serialutil.SerialException as e:
    ...      s = e
    ...
    >>> s
    SerialException("could not open port 'com4': FileNotFoundError(2, 'The system cannot find the file specified.', None, 2)")
    >>> s.args
    ("could not open port 'com4': FileNotFoundError(2, 'The system cannot find the f
    ile specified.', None, 2)",)
    >>> str(s)
    "could not open port 'com4': FileNotFoundError(2, 'The system cannot find the fi
    le specified.', None, 2)"
    >>>
    Vous auriez constaté que le FileNotFoundError est dans une chaine de caractères.

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

  5. #5
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2020
    Messages : 25
    Par défaut
    A vrai dire je suivie le cours que vous proposez(
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import urllib2
     
    def downloadPage(address):
        error = ""
        page = ""
        try:
            data = urllib2.urlopen(address)
            page = data.read()
        except IOError, e:
            if hasattr(e, 'reason'):
                error =  "Cannot reach web server: " + str(e.reason)
            if hasattr(e, 'code'):
                error = "Server failed %d" %(e.code)
        return page, error
    )....
    Mais je n'est pas compris réellement comment trouver les bonnes instances associer à serial.serialutil.SerialException car en effet erron lui est associer à IOError et non à serial.serialutil.SerialException. En effet, de base je souhaitais mettre bel et bien "except: serial.serialutil.SerialException" mais cela était un erreur d'étourdissement..... Je pensais qu'il fallait mettre erron.EONENT car en me documentant j'avais remarqué qu'il existait une hiérarchie de classes pour les exceptions natives est la suivante.....

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    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 716
    Par défaut
    Salut,

    Citation Envoyé par abcbbm Voir le message
    A vrai dire je suivie le cours que vous proposez
    Prenez le temps de comprendre ce que raconte votre cours plutôt que de recopier des trucs au pif: çà ne marche pas si souvent.

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

  7. #7
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2020
    Messages : 25
    Par défaut
    Ça marche !

Discussions similaires

  1. Set serial Number sur une disquette
    Par Cpet dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/12/2004, 10h24
  2. boost::serialize
    Par Fry dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 05/11/2004, 18h03
  3. type serial : pb
    Par xopos dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 02/09/2004, 09h08
  4. [DB2 V7 & V8] equivalent du type SERIAL
    Par geoffrey_k dans le forum DB2
    Réponses: 3
    Dernier message: 05/07/2004, 14h09
  5. Problème de serialization
    Par bruno270579 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/04/2003, 18h11

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