OVH Cloud OVH Cloud

Erreur de syntaxe de débutant ?

10 réponses
Avatar
Sebastien Kirche
Bonjour,

je me mets au Python sur un cas concret : rechercher un joueur sur les
serveurs en ligne du jeux Ennemy Territory.

J'ai déjà gribouillé un ou deux scripts crades qui me permettent de lister
les serveurs sur le serveur maître, puis de lister les joueurs sur chacun
des serveurs.
Là j'essaie de faire un truc beau et propre avec sockets asynchrones grâce à
la bibliothèque Twisted.

Mais je bute sur un problème de syntaxe dans une classe. Voici mon code :
,----[ twist_master.py ]
| #!/usr/bin/python
| # -*- coding: iso-8859-1 -*-
|
| from twisted.internet import reactor
| from twisted.internet.protocol import DatagramProtocol
|
| master_server_port = 27950
| master_server_url = 'etmaster.idsoftware.com'
| master_query = 'ÿÿÿÿgetservers 83 full' # ÿ = \377
| master_response = 'ÿÿÿÿgetserverResponse'
|
| class MasterServerUDP(DatagramProtocol):
|
| def startProtocol(self):
| address = reactor.resolve(master_server_url)#.result
| d = self.transport.connect(address , master_server_port)
| d.addCallback(self._cbConnected)
|
| def _cbConnected(self, (host, port)):
| print "Connecté à %s" % str((host, port))
| self.transport.write(master_query)
|
| def datagramReceived(self, data, (host, port)):
| print "received %r from %s:%d" % (data, host, port)
|
| reactor.listenUDP(0, MasterServerUDP())
| reactor.run()
`----

Et l'interpréteur bloque là :
,----[ python ~/Projets/python/twist_master.py ]
| File "/Users/seki/Projets/python/twist_master.py", line 24
| print "received %r from %s:%d" % (data, host, port)
| ^
| IndentationError: expected an indented block
`----

Ce qui m'échappe c'est que l'instruction est déjà indentée ??? J'ai comparé
avec d'autres déclarations de classe, je ne vois pas le problème.


Question subsidiaire : comment je pourrais filtrer dans une chaîne les
couples ^+char pour les ignorer ?

ex: "une^1chaine^7comme^fca" => "unechainecommeca"

Y aurait-il un moyen élégant autre qu'en bouclant sur la chaîne avec la
méthode index ?

Merci pour vos tuyaux.

Sébastien Kirche

10 réponses

Avatar
ronan
salut a vu de nez tu a mis un espace de trop a ton print?
Avatar
ronan
ou alors pas assez d'espace?
Avatar
Tibi
On Wed, 06 Oct 2004 16:39:42 +0200, Sebastien Kirche
wrote:

| def startProtocol(self):
| address = reactor.resolve(master_server_url)#.result


Tu as mélangé les tabs et les espaces.
C'est très très mal, tu as un blâme !

Avatar
Roger That
Question subsidiaire : comment je pourrais filtrer dans une chaîne les
couples ^+char pour les ignorer ?

ex: "une^1chaine^7comme^fca" => "unechainecommeca"

Y aurait-il un moyen élégant autre qu'en bouclant sur la chaîne avec la
méthode index ?


Un truc comme:

import re

exprt = re.compile(r"^.")

"".join(expr.split("12^345^6789"))

(bof pour les perfs j'imagine)

Avatar
Sebastien Kirche
Le 6 oct 2004, s'est exprimé ainsi :

Tu as mélangé les tabs et les espaces.
C'est très très mal, tu as un blâme !


Bien vu !
Je crois que je ne l'aurais jamais trouvé.

Pourtant j'utilise le mode python d'Emacs pour indenter. Quoique ce bout a
dû être copié-scotché depuis le navigateur internet.

Bon, je n'ai plus qu'à trouver comment afficher les caractères invisibles
pour ne plus me faire avoir...

Merci beaucoup.

Sébastien Kirche

Avatar
Sebastien Kirche
Le 6 oct 2004, Roger That a dit :

Question subsidiaire : comment je pourrais filtrer dans une chaîne les
couples ^+char pour les ignorer ? ex: "une^1chaine^7comme^fca" =>
"unechainecommeca" Y aurait-il un moyen élégant autre qu'en bouclant sur
la chaîne avec la méthode index ?


Un truc comme:

import re

exprt = re.compile(r"^.")

"".join(expr.split("12^345^6789"))

(bof pour les perfs j'imagine)


Boah, je ne recherche pas de perfs (pour le moment).
C'est pas mal comme idée, utiliser une expression rationnelle.

Merci pour le truc.

Sébastien Kirche


Avatar
richard
Sebastien Kirche wrote:


Question subsidiaire : comment je pourrais filtrer dans une chaîne les
couples ^+char pour les ignorer ?

ex: "une^1chaine^7comme^fca" => "unechainecommeca"


tu .split la chaine sur ^ et dans une boucle tu supprimes le premier
char de chaque element de la liste tout en creant une nouvelle chaine



--
http://www.rootsaka.com

Avatar
bruno modulix
Sebastien Kirche wrote:


Question subsidiaire : comment je pourrais filtrer dans une
chaîne les
couples ^+char pour les ignorer ?

ex: "une^1chaine^7comme^fca" => "unechainecommeca"



tu .split la chaine sur ^ et dans une boucle tu supprimes le premier
char de chaque element de la liste tout en creant une nouvelle chaine


Juste pour le fun...

s = "une^1chaine^7comme^fca"
''.join([p[1:] for p in (' ' + s).split('^')])

=> 'unechainecommeca'

Elle est pas belle, la vie ?-)

Bruno


Avatar
richard
bruno modulix wrote:

s = "une^1chaine^7comme^fca"
''.join([p[1:] for p in (' ' + s).split('^')])

=> 'unechainecommeca'

Elle est pas belle, la vie ?-)



la vie je sais pas, mais python si, c'est bô


--
http://www.rootsaka.com

Avatar
Nicolas Gruel
selectionner le fichier puis faire un M-x untabify ??? Ou bien utiliser
le script python qui est dans les examples fourni (untabify.py)

Nicolas

Sebastien Kirche wrote:
Le 6 oct 2004, s'est exprimé ainsi :


Tu as mélangé les tabs et les espaces.
C'est très très mal, tu as un blâme !



Bien vu !
Je crois que je ne l'aurais jamais trouvé.

Pourtant j'utilise le mode python d'Emacs pour indenter. Quoique ce b out a
dû être copié-scotché depuis le navigateur internet.

Bon, je n'ai plus qu'à trouver comment afficher les caractères i nvisibles
pour ne plus me faire avoir...

Merci beaucoup.

Sébastien Kirche