Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 27, 2011 11:25:43

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема - string != string

python3
есть класс

class acc:
server = ''
login = ''
password = ''
в него во время работы помещается айпи сервера в виде строки
после чего пытаюсь подключиться к FTP

ftp = FTP(acc.server, acc.login, acc.password, timeout=5)
ничего не получается, таймаут истекает
но если прописать айпи вручную - работает:

ftp = FTP('82.164.59.10', acc.login, acc.password, timeout=5)
самое непонятное, что если тут же распечатать вот это:
        print(type (job.acc.server), len(job.acc.server), job.acc.server, type('82.146.59.10'), len('82.146.59.10'), '82.146.59.10')
print('DIFF', (job.acc.server == '82.146.59.10'))
выведет:
<class 'str'> 12 82.164.59.10 <class 'str'> 12 82.146.59.10
DIFF False
т.е. они полностью идентичны, но при сравнении - false!
почему так?



Отредактировано (Янв. 27, 2011 11:26:27)

Офлайн

#2 Янв. 27, 2011 11:51:33

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

проблема - string != string

хм… вы уверены что работаете с тем же экземпляром класса?



Офлайн

#3 Янв. 27, 2011 12:11:50

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема - string != string

нашел проблему, правда до конца её не понимаю

изначально имеем ftp-акк в списке - data.strip()
я помещал его в свойство объекта Job():

j.acc = data[1].strip()
а потом обрабатывал функцией, которая разбивала ftp-акк на логин-пароль-сервер-файл и возвращала объект Acc() с 4мя свойствами:
j.acc = self.parseFtp(j.acc)
моя ошибка была в том, что я тут же помещал полученный объект на место строки
в php5 это работало бы нормально, а в питоне начались вот такие паранормальные сравнения, в которых строка j.acc.server - не была равна ‘11.11.11.11’ - при том, что совпадала длина, тип и содержимое

исправил так:
j.acc = self.parseFtp(data[1].strip())
и всё заработало



Отредактировано (Янв. 27, 2011 12:14:18)

Офлайн

#4 Янв. 27, 2011 12:38:42

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема - string != string

хм, а сейчас всё стало ещё более необьяснимо:

        print((job.acc.login == 'user')) # true
print((job.acc.password == 'pass')) # true
print((job.acc.server == '82.164.59.10')) # true

#ftp = FTP(job.acc.server, job.acc.login, job.acc.password, timeout=5) # ERROR TIMEOUT!!
ftp = FTP('82.146.59.10', 'login', 'passw') # работает
как??? как это объяснить? я уже изолировал этот код от контекста
почему конструктор FTP() не принимает свойства объекта?

при этом, в отдельном файле, вне проекта, такой пример работает:
from ftplib import FTP
class a:
server = '82.146.59.10'

class b:
a = ''

b.a = a()

ftp = FTP(b.a.server, 'user', 'pass')



Отредактировано (Янв. 27, 2011 12:41:24)

Офлайн

#5 Янв. 27, 2011 12:49:33

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема - string != string

о господи, я идиот

конечно 82.146.59.10 не равен 82.164.59.10



Офлайн

#6 Янв. 27, 2011 16:48:29

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

проблема - string != string

я смотрю, не жалко тебе давать доступ к своему сайту и виртуалке всему интернету…

меняй пароль на ftp и ssh, пока это не сделал кто-нибудь другой

Отредактировано (Янв. 27, 2011 16:49:36)

Офлайн

#7 Янв. 27, 2011 18:02:40

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

проблема - string != string

o7412369815963, поправил за него, а то пока топикстартер объявиться или сообразит что к чему…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version