Partage
  • Partager sur Facebook
  • Partager sur Twitter

Initialiser une variable "file"

Sujet résolu
    28 février 2012 à 1:24:53

    Bonjour,

    Je suis habitué au C++, mais je fais quelques programmes en python afin de les faire plus rapidement.

    Seulement j'ai un problème, n'étant pas habitué a ce langage.

    J'aimerais lire un fichier pour savoir ce que j'ai enregistré, mais si l'on a rien enregistré, le fichier peut ne pas exister. Lors d'un open en mode lecture, une exception à lieu, j'ai donc écrit mon code de cette facon pour la gérer:

    try:
    			myFile = open("connections", "r")
    		except IOError:
    			print("No connection saved")
    		else:
    			print(myFile.read())
    		finally:
    			myFile.close()
    


    Mais le problème comme vous l'avez surment vu, c'est que en dehors du try, myFile n'est pas déclaré, donc je devrai déclaré cette variable avant try. myFile n'étant pas un int ou un string je ne peux pas faire = "" ou = 0. Donc comment faire pour initialiser avant cette variable sans faire un open() inutile ?

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      28 février 2012 à 7:48:35

      Salut,

      Un bloc with t'évitera d'avoir à t'embêter avec la fermeture explicite du fichier : tant que tu es dans ce bloc, le fichier est ouvert, et dès que tu en sors (normalement ou à cause d'une exception) il est fermé.

      try:
          with open('connexions', 'r') as my_file:
              # Tant que tu es dans ce bloc, tu peux agir en étant sûr
              # que la variable my_file est définie et qu'elle fait référence 
              # à un fichier ouvert.
              print(my_file.read())
      
          # Ici, my_file n'est plus définie, et le fichier est fermé,
          # même si tu es sorti du bloc à cause d'une erreur.
      
      except IOError as e:
          # Si une exception est levée, elle n'est pas interceptée par 
          # le bloc 'with', donc il faut la rattraper et la traiter.
          print('Error:', e)
      


      PS : D'une façon générale en Python, si tu t'apprêtes à prédéclarer une variable, c'est qu'il y a un soucis.

      PPS : Mais si vraiment tu n'as pas d'autre solution, la façon la plus simple de le faire est my_var = None.
      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !
        28 février 2012 à 21:30:12

        Merci.

        Lorsque tu dis prédéclarer une variable, tu sous-entends que les variables globales ne sont pas conseillés ?

        J'en utilise dans un petit programme, mais les variables en question j'en beaucoup besoin (ip, port, et la variable qui contient la connexion.
        • Partager sur Facebook
        • Partager sur Twitter
          28 février 2012 à 21:52:57

          Citation : x4rkz


          Lorsque tu dis prédéclarer une variable, tu sous-entends que les variables globales ne sont pas conseillés ?



          Il n'y a aucun problème avec les variables globales en Python.

          Comme C++, Python fonctionne avec des namespaces, donc si tu déclares une variable globale, elle sera quand même contenue dans un scope restreint au module, ce qui évite les effets de bord dangereux.

          Je parlais juste d'éviter de les prédéclarer à None, sans les initialiser.
          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !

          Initialiser une variable "file"

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown