incorporer plusieurs variables dans du code python

incorporer plusieurs variables dans du code python - Python - Programmation

Marsh Posté le 01-12-2014 à 01:40:03    

Bonjour,
 
Je suis débutant en python, j'utilise lpython 2.7.3.
J'ai fait une mini appli, une télécommande par lan.
j'ai créé une fonction pour lire le contenu d'un fichier de configuration .conf avec setion.
 

Code :
  1. def test5():
  2.     config = SafeConfigParser()
  3.     #config = configparser.RawConfigParser()
  4.     config.read('/home/laurent/.test2/tfbx6.cfg')
  5.     b = config.get('Box', 'boitier')
  6.     a = config.get('Box', 'appui')
  7.     t = config.get('Box', 'code_tlc')
  8.     print(b + a + t)


 
Le contenu du fichier de configuration

Code :
  1. [Box]
  2. boitier = hd1.freebox.fr
  3. appui = false
  4. code_tlc = 52968214


 
Là où je bloque c'est que je n'arrive pas à trouver la solution pour faire passer mes variables b, a et t ci-dessous

Code :
  1. def touche_1():
  2.     print "Touche 1"
  3.     #urllib2.urlopen("http://hd1.freebox.fr/pub/remote_control?key=1&repeat=1&long=false&code=52968214" ) # ok la ça marche sans les variables
  4.     urllib2.urlopen("http://%s/pub/remote_control?key=1&repeat=1&long=%s&code=%d" % (b, a, t))


 
Python me retourne le message d'erreur :

Code :
  1. Touche 1
  2. Exception in Tkinter callback
  3. Traceback (most recent call last):
  4.   File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
  5.     return self.func(*args)
  6.   File "telecommande-freebox6-4.py", line 531, in touche_1
  7.     urllib2.urlopen("http://%s/pub/remote_control?key=1&repeat=1&long=%s&code=%d" % (b, a, t))
  8. NameError: global name 'b' is not defined


 
comment dois-je faire ?
Merci


Message édité par xunil2003 le 01-12-2014 à 12:24:49
Reply

Marsh Posté le 01-12-2014 à 01:40:03   

Reply

Marsh Posté le 01-12-2014 à 14:44:40    

def touche_1():
 
Doit devenir:
def touche_1(b, a, t):
 
Et tu dois l'appeler de la sorte:
 
touche_1(b, a, t)
 
 
Car sinon python va tenter de trouver, b, a et t, en dehors de toute fonction (en scope global donc), car le fait que tu lise b,a et t dans la fonction test5, fait que ces variables n'existent QUE dans test5 (et donc pas en dehors). Si tu veux les utiliser ailleurs, il faut les "transporter" d'une fonction à l'autre, et le code au dessus est ce qui te permettra d'y arriver => via les arguments de la fonction.

Reply

Marsh Posté le 01-12-2014 à 16:41:55    

Bonjour;
 
j'ai rectifié la fonction :

Code :
  1. def touche_1(b, a, t):
  2.     print "Touche 1"
  3.     urllib2.urlopen("http://%s/pub/remote_control?key=1&repeat=1&long=%s&code=%d" % (b, a, t))


 
Mais quand j'appelle la focntion comme ceci :

Code :
  1. add_button(panel=panel1, image_button=image_bouton_1, x=12, y=65, command=touche_1(b, a, t))


 
Python m'affiche ce message d'erreur :

Code :
  1. Touche 1
  2. Traceback (most recent call last):
  3.   File "telecommande-freebox6-4.py", line 915, in <module>
  4.     add_button(panel=panel1, image_button=image_bouton_1, x=12, y=65, command=touche_1(b, a, t))
  5.   File "telecommande-freebox6-4.py", line 534, in touche_1
  6.     urllib2.urlopen("http://%s/pub/remote_control?key=1&repeat=1&long=%s&code=%d" % (b, a, t))
  7. TypeError: %d format: a number is required, not str


 
Merci.

Reply

Marsh Posté le 01-12-2014 à 17:41:13    

Le message d'erreur est explicite : ta variable t est une string alors que le formatage en %d demande un nombre, int ou float.
 
Il faut donc que tu fasses en sorte que t soit du bon type, ou que tu remplaces le %d par un %s.
 
Par ailleurs, je t'incite fortement à utiliser .format() au lieu de %.


---------------
[VDS] Divers oldies PCI, Teensy 2 [ACH] Corsair Strafe, vieux claviers
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed