Проблема с назначением строки в Python! - PullRequest
1 голос
/ 03 мая 2011

Так что я довольно новичок в Python, но совершенно не понимаю, почему этот сильный oldUser переходит к текущему пользователю после того, как я произвожу синтаксический анализ.Любая помощь будет принята с благодарностью.

while a < 20:
    f = urllib.urlopen("SITE")
    a = a+1

    for i, line in enumerate(f):
        if i == 187:
            print line

            myparser.parse(line)
            if fCheck == 1:
                result  = oldUser[0] is oldUser[1]
                print oldUser[0]
                print oldUser[1]
            else:
                result = user is oldUser

            fCheck = 1
            print result

            user = myparser.get_descriptions(firstCheck)

            firstCheck = 1
            print user

            if result:
                print "SAME"
                array[index+1] = array[index+1] +0
            else:
                oldUser = user

        elif i > 200:
            break
        myparser.reset()

Я не понимаю, почему результат тоже не работает ... Я распечатываю оба значения, и когда они совпадают, они говорят мне, что они не равны ... Кроме того, почемуmyparser.parse (line) превращает oldUser в массив размера 2?Спасибо!

** Вот определение myparse ...

class MyParser(sgmllib.SGMLParser):
"A simple parser class."

def parse(self, s):
    "Parse the given string 's'."
    self.feed(s)
    self.close()

def __init__(self, verbose=0):
    "Initialise an object, passing 'verbose' to the superclass."

    sgmllib.SGMLParser.__init__(self, verbose)
    self.divs = []
    self.descriptions = []
    self.inside_div_element = 0

def start_div(self, attributes):
    "Process a hyperlink and its 'attributes'."

    for name, value in attributes:
        if name == "id":
            self.divs.append(value)
            self.inside_div_element = 1

def end_div(self):
    "Record the end of a hyperlink."

    self.inside_div_element = 0

def handle_data(self, data):
    "Handle the textual 'data'."

    if self.inside_div_element:
        self.descriptions.append(data)


def get_div(self):
    "Return the list of hyperlinks."

    return self.divs

def get_descriptions(self, check):
    "Return a list of descriptions."
if check == 1:
    self.descriptions.pop(0)
    return self.descriptions

Ответы [ 2 ]

5 голосов
/ 03 мая 2011

Не сравнивайте строки с is.Это проверяет, являются ли они одним и тем же объектом, а не двумя копиями одной строки.См .:

>>> string = raw_input()
hello
>>> string is 'hello'
False
>>> string == 'hello'
True

Также было бы полезно определение myparser.

1 голос
/ 03 мая 2011

Я не совсем уверен, что делает ваш код, но я подозреваю, что вы хотите использовать == вместо is.Использование is сравнивает идентичность объекта, которая не совпадает с равенством строк.Два разных строковых объекта могут содержать одну и ту же последовательность символов.

result = oldUser[0] == oldUser[1]

Если вам интересно, для получения дополнительной информации о поведении оператора is см. Оператор Python «is» ведет себя неожиданнос целыми числами .

...