我有下面编写的代码
class Test:
def __init__(self,value):
''' Constructor. '''
self.ext_ip_address = value
def ip_address_changed(self):
with open(IP_ADDR, 'r') as ip_address:
ip_addr = ip_address.read().replace('\n','')
if not ip_address == self.ext_ip_address:
self.ext_ip_address = ip_address
print 'IP ADDR', ip_addr
print 'EXT IP ADDR', self.ext_ip_address
return True
return False
# Run following code when the program starts
if __name__ == '__main__':
test_obj = Test('')
if test_obj.ip_address_changed():
print "IP changed"
else:
print "IP constant"
这里我从文件中读取机器的IP地址(即ip_addr
局部变量),然后我检查机器的IP地址是否从最后一个值(即self.ext_ip_address
)更改。然后我尝试打印变量ip_addr
和self.ext_ip_address
的值。对于ip_addr
,我得到了正确的价值。但是对于self.ext_ip_address
,我得到了如下奇怪的价值:
IP ADDR 192.168.44.100
EXT IP ADDR <open file '/usr/local/bin/data/ip_address.dat', mode 'r' at 0xb772e230>
请告诉我这是什么原因。 在此先感谢!!!
答案 0 :(得分:4)
您在两个地方混淆了ip_addr
和ip_address
。 ip_address
是您的文件,这是您打印的内容而不是您想到的地址。
class Test:
def __init__(self,value):
''' Constructor. '''
self.ext_ip_address = value
def ip_address_changed(self):
with open(IP_ADDR, 'r') as ip_address:
ip_addr = ip_address.read().strip() # Per VMRuiz's comment
if not ip_addr == self.ext_ip_address: # HERE
self.ext_ip_address = ip_addr # AND HERE
print 'IP ADDR', ip_addr
print 'EXT IP ADDR', self.ext_ip_address
return True
return False
更清晰的变量名称将来会阻止此问题。