所以我对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(行)将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
答案 0 :(得分:5)
请勿将字符串与is
进行比较。检查它们是否是同一个对象,而不是同一个字符串的两个副本。参见:
>>> string = raw_input()
hello
>>> string is 'hello'
False
>>> string == 'hello'
True
此外,myparser
的定义也很有用。
答案 1 :(得分:1)
我不太确定您的代码在做什么,但我怀疑您要使用==
代替is
。使用is
比较对象标识,不与字符串相等相同。两个不同的字符串对象可能包含相同的字符序列。
result = oldUser[0] == oldUser[1]
如果您感到好奇,有关is
运算符行为的详细信息,请参阅Python “is” operator behaves unexpectedly with integers。