2013-07-26 3 views
-2

Использование tkinter, когда я пытаюсь открыть клиент, я получаю ошибку:NameError: глобальное имя «клиент» не определен

NameError: global name 'client' is not defined

Traceback(most recent call lost): 
File "C:\Users\Gerardi\Desktop\graf2.py", line 21, in <module> 
cliente2 = conectar() 
File "C:\Users\Gerardi\Desktop\graf2.py", line 18, in conectar 
cliente.connect(address) 
File "C:\Python27\lib\socket.py", line 224, in meth 
return getattr(self._sock,name)(*args) 
ocket.error: [Errno 10049] La direcci¾n solicitada no es vßlida en este context 

def conectar(): 
    cliente = socket.socket(2,1) 
    ip = cuadro_texto3.get("1.0", "1.end") 
    address = (ip, 5001) 
    cliente.connect(address) 
    return cliente 

cliente2 = conectar() 

def check_message(cliente): 
while True: 
    try: 
     datos = cliente.recv(1000) 
     cuadro_texto2.insert("1.0", datos) 
    except socket.error: 
     break 
    if datos == "quit": 
     cliente.close() 
     server.close()  
cliente.close() 
+0

Ошибка указывает, что вы пытаетесь использовать переменную 'cliente', которая не определена. возможно, вы ошиблись, возможно, вы не инициализировали его, прежде чем использовать его ... показать источник 'check_message', если вам нужна дополнительная помощь – Gryphius

+0

Вы должны были отредактировать вопрос, чтобы добавить этот код, здесь он не читается. –

+0

им очень жаль об этом, это мой первый вопрос здесь. –

ответ

1

Вы не должны использовать глобальной в любом случае. Используйте возвращаемые значения и параметры.

def conectar(): 
    [... your code ...] 
    return cliente 

def check_message(cliente): 
    [... your code ...] 

client = conectar() 
check_message(client) 

Кроме того, было бы неплохо закрыть соединение в функции, называемой * check_message *. Для этого у вас должна быть собственная функция.

Рефакторинг всего кода в классе может быть хорошей идеей в долгосрочной перспективе.