在python中没有获得字符串变量的正确值

时间:2017-05-19 07:14:05

标签: python python-2.7

我有下面编写的代码

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_addrself.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>

请告诉我这是什么原因。 在此先感谢!!!

1 个答案:

答案 0 :(得分:4)

您在两个地方混淆了ip_addrip_addressip_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

更清晰的变量名称将来会阻止此问题。