TypeError: expected string or buffer
_armydead11
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
_armydead11 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
_armydead11 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
bonjours a tous,
j'ai un problème sur mon serveur de messagerie instantanée voici mon code:
#! /usr/bin/env python2.7
import threading
import gtk
import gobject
import socket
import re
import time
import datetime
gobject.threads_init()
class MainWindow(gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.set_title("IM Client")
vbox = gtk.VBox()
hbox = gtk.HBox()
self.username_label = gtk.Label()
self.text_entry = gtk.Entry()
send_button = gtk.Button("envoyer")
self.text_buffer = gtk.TextBuffer()
text_view = gtk.TextView(self.text_buffer)
self.connect("destroy", self.graceful_quit)
send_button.connect("clicked", self.send_message)
self.text_entry.connect("activate", self.send_message)
vbox.pack_start(text_view)
hbox.pack_start(self.username_label, expand = False)
hbox.pack_start(self.text_entry)
hbox.pack_end (send_button, expand = False)
vbox.pack_end(hbox, expand = False)
self.add(vbox)
self.show_all()
self.configure()
def ask_for_info(self, question):
dialog = gtk.MessageDialog(parent = self, type = gtk.MESSAGE_QUESTION,
flags = gtk.DIALOG_MODAL |
gtk.DIALOG_DESTROY_WITH_PARENT,
buttons= gtk.BUTTONS_OK_CANCEL,
message_format = question)
entry = gtk.Entry()
entry.show()
dialog.vbox.pack_end(entry)
response = dialog.run()
response_text = entry.get_text()
dialog.destroy()
if response == gtk.RESPONSE_OK:
return response
else:
return None
def configure(self):
server = self.ask_for_info("server_address:port")
regex = re.search('^(\d+\.\d+\.\d+\.\d+):(\d+)$', server)
address = regex.group(1).strip()
port = regex.group(2).strip()
self.username = self.ask_for_info("username")
self.username_label.set_text(self.username)
self.network = Networking(self, self.username, address, int(port))
self.network.listen()
def add_text(self, new_text):
text_with_timestamp = "{0} {1}".format(date.datetime.now(),new_text)
end_itr = self.text_buffer.get_end_iter()
self.text_buffer.insert(end_itr, text_with_timestamp)
def send_message(self, widget):
new_text = self.text_entry.get_text()
self.text_entry.set_text("")
message = "{0} dit: {1}\n".format (self.username, new_text)
self.network.send(message)
def graceful_quit(self, widget):
gtk.main_quit()
self.network.send("QUIT")
self.network.tidy_up()
class Networking():
def __init__(self, window, username, server, port):
self.window = window
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((server, port))
self.listening = True
self.send("USERNAME {0}".format(username))
def listener(self):
while self.listening:
data = ""
try:
data = self.socket.recv(443)
except socket.error:
"impossible de recevoir les donnes"
self.handle_msg(data)
time.sleep(0.1)
def listen(self):
self.listen_thread = threading.Thread(target=self.listener)
self.listener_thread.daemon = True
self.listen_thread.start()
def send(self, message):
print "envoie: {0}".format(message)
try:
self.socket.sendall(message)
except socket.error:
print "impossible d'envoyer le message"
def tidy_up(self):
self.listening = False
self.socket.close()
gobject.idle_add(self.window.add_text, "server a quitter.\n")
def handle_msg(self, data):
if data == "QUIT":
self.tidy_up()
elif data == "":
self.tidy_up()
else:
gobject.idle_add(self.window.add_text, data)
if __name__ == "__main__":
MainWindow()
gtk.main()
et voici mon erreur:
Traceback (most recent call last):
File "./IM-Client.py", line 117, in <module>
MainWindow()
File "./IM-Client.py", line 34, in __init__
self.configure()
File "./IM-Client.py", line 58, in configure
regex = re.search('^(\d+\.\d+\.\d+\.\d+):(\d+)$', server)
File "/usr/lib/python2.7/re.py", line 146, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or buffer
Merci d'avance pour vos réponses.
j'ai un problème sur mon serveur de messagerie instantanée voici mon code:
#! /usr/bin/env python2.7
import threading
import gtk
import gobject
import socket
import re
import time
import datetime
gobject.threads_init()
class MainWindow(gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.set_title("IM Client")
vbox = gtk.VBox()
hbox = gtk.HBox()
self.username_label = gtk.Label()
self.text_entry = gtk.Entry()
send_button = gtk.Button("envoyer")
self.text_buffer = gtk.TextBuffer()
text_view = gtk.TextView(self.text_buffer)
self.connect("destroy", self.graceful_quit)
send_button.connect("clicked", self.send_message)
self.text_entry.connect("activate", self.send_message)
vbox.pack_start(text_view)
hbox.pack_start(self.username_label, expand = False)
hbox.pack_start(self.text_entry)
hbox.pack_end (send_button, expand = False)
vbox.pack_end(hbox, expand = False)
self.add(vbox)
self.show_all()
self.configure()
def ask_for_info(self, question):
dialog = gtk.MessageDialog(parent = self, type = gtk.MESSAGE_QUESTION,
flags = gtk.DIALOG_MODAL |
gtk.DIALOG_DESTROY_WITH_PARENT,
buttons= gtk.BUTTONS_OK_CANCEL,
message_format = question)
entry = gtk.Entry()
entry.show()
dialog.vbox.pack_end(entry)
response = dialog.run()
response_text = entry.get_text()
dialog.destroy()
if response == gtk.RESPONSE_OK:
return response
else:
return None
def configure(self):
server = self.ask_for_info("server_address:port")
regex = re.search('^(\d+\.\d+\.\d+\.\d+):(\d+)$', server)
address = regex.group(1).strip()
port = regex.group(2).strip()
self.username = self.ask_for_info("username")
self.username_label.set_text(self.username)
self.network = Networking(self, self.username, address, int(port))
self.network.listen()
def add_text(self, new_text):
text_with_timestamp = "{0} {1}".format(date.datetime.now(),new_text)
end_itr = self.text_buffer.get_end_iter()
self.text_buffer.insert(end_itr, text_with_timestamp)
def send_message(self, widget):
new_text = self.text_entry.get_text()
self.text_entry.set_text("")
message = "{0} dit: {1}\n".format (self.username, new_text)
self.network.send(message)
def graceful_quit(self, widget):
gtk.main_quit()
self.network.send("QUIT")
self.network.tidy_up()
class Networking():
def __init__(self, window, username, server, port):
self.window = window
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((server, port))
self.listening = True
self.send("USERNAME {0}".format(username))
def listener(self):
while self.listening:
data = ""
try:
data = self.socket.recv(443)
except socket.error:
"impossible de recevoir les donnes"
self.handle_msg(data)
time.sleep(0.1)
def listen(self):
self.listen_thread = threading.Thread(target=self.listener)
self.listener_thread.daemon = True
self.listen_thread.start()
def send(self, message):
print "envoie: {0}".format(message)
try:
self.socket.sendall(message)
except socket.error:
print "impossible d'envoyer le message"
def tidy_up(self):
self.listening = False
self.socket.close()
gobject.idle_add(self.window.add_text, "server a quitter.\n")
def handle_msg(self, data):
if data == "QUIT":
self.tidy_up()
elif data == "":
self.tidy_up()
else:
gobject.idle_add(self.window.add_text, data)
if __name__ == "__main__":
MainWindow()
gtk.main()
et voici mon erreur:
Traceback (most recent call last):
File "./IM-Client.py", line 117, in <module>
MainWindow()
File "./IM-Client.py", line 34, in __init__
self.configure()
File "./IM-Client.py", line 58, in configure
regex = re.search('^(\d+\.\d+\.\d+\.\d+):(\d+)$', server)
File "/usr/lib/python2.7/re.py", line 146, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or buffer
Merci d'avance pour vos réponses.
A voir également:
- Expected string or buffer
- Typeerror: botbase.__init__() missing 1 required keyword-only argument: 'intents' ✓ - Forum Python
- Typeerror: can't multiply sequence by non-int of type 'str' - Forum Python
- TypeError: 'int' object is not iterable ✓ - Forum Python
- TypeError: 'NoneType' object is not subscriptable - Forum Python
- TypeError: 'float' object is not subscriptable - Forum Python
Moi, je dirai que ce n'est pas response que ask_for_info doit retourner, mais response_text.
D'ailleurs, tu auras aussi un plantage si ta méthode retourne None.
Mais j ai encore un autre problème... (voir photo)
Si vous pourriez encore me filer un coup de main ce serait vraiment sympas...