2015-05-13 2 views
0

Я пытаюсь сравнить две строки в python и по какой-то причине они просто не совпадают.Почему эти две строки не равны друг другу?

Я убедился, что нет пробелов, и они оба являются строковыми типами, но все равно не повезло, даже если они точно такие же.

if versions['ksp_version'] is self.version: 

Струны как «1.0.2», и я попытался как is и == не повезло.

Есть ли лучший способ сравнить строки в python, которые я просто отсутствую?

EDIT: Еще один контекст.

Итак, я добавил эти строки и распечатал переменные.

print versions['ksp_version'] 
print type(versions['ksp_version']) 
print "====" 
print self.version 
print type(self.version) 

И вот что мы получили.

1.0.2 
<type 'str'> 
==== 
1.0.2 
<type 'str'> 

Исходя из этого, они выглядят одинаково. Оба они были лишены пробелов, используя .strip().

+3

Адрес, если вы еще не указали названия этих двух строк. Я просто вижу огромную программу. –

+4

'is' просто плоский вне здесь. Вам все равно, являются ли две строки одним и тем же объектом. Как вы проверяете, что «версии ['ksp_verison']' и 'self.version' идентичны? – chepner

+1

Что сказал Стефан. Если вы ссылаетесь на строку 'if versions ['ksp_version'] is self.version', то' is', конечно, неверно. Это проверяет идентификацию объекта, а не равенство ценности. (Например, это то же самое, что хранится точно в одном и том же месте в памяти компьютера.) –

ответ

3

Трудно сказать, не видя фактических строк. Когда вы читаете из файла, убедитесь, что strip линия вы сравниваете, чтобы избавиться от потенциальных \n с в конце:

with open("input.txt") as f: 
    for line in f: 
    print line == "asd" 
    print line.strip() == "asd" 

отпечатки

False 
True 

для input.txt:

asd 

is приведет только к True для строк, которые являются одним и тем же объектом, то есть строки , известные по определенному адресу, инициализируются до того же значения до времени выполнения.