【问题标题】:Python while enters an infinite loop when reading linesPython while读取行时进入无限循环
【发布时间】:2019-03-09 15:17:39
【问题描述】:

我想用下面的代码读取 DS18B20 传感器数据:

filepath = "/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves"

with open(filepath) as fp:
    sensor=fp.readline()
    while sensor:
        print("Sensor: {}".format(sensor.strip()))
        with open("/sys/bus/w1/devices/" + sensor.strip() + "/w1_slave") as fp1:
            sensor_data = fp1.read()
            print(sensor_data.strip())
    sensor=fp.readline()

问题是while循环从不跳到下一行,一直在第一行循环。

我在这里错过了什么?

PS。我对 python 完全陌生,这是我的第一个 python 代码

【问题讨论】:

  • 因为,sensor 永远不会在循环内更新。它不断循环通过第一个读取值。也许缩进最后一行?
  • sensor=fp.readline() 应该在循环中吗?它在外面张贴在这里。
  • 那么,sensor=fp.readline() 应该再缩进一次吗?
  • 是的,现在可以使用了!谢谢
  • @Austin,请发表您的评论作为答案。

标签: python while-loop readline


【解决方案1】:

正如 cmets 中所讨论的,问题是 sensor 永远不会在循环中得到更新。它不断循环通过第一个读取值。这可以通过缩进代码的最后一行来纠正。

我建议使用for 循环。当我们简单地迭代文件处理程序时,我们会迭代文件中的行。

with open(filepath) as fp:
    for sensor in fp:
        print("Sensor: {}".format(sensor.strip()))
        with open("/sys/bus/w1/devices/" + sensor.strip() + "/w1_slave") as fp1:
            sensor_data = fp1.read()
            print(sensor_data.strip())

【讨论】:

    【解决方案2】:

    因为传感器没有在循环中改变,试试这个

    filepath = "/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves"
    
    with open(filepath) as fp:
        sensor = fp.readline()
            while (sensor):
                print("Sensor: {}".format(sensor.strip()))
                with open("/sys/bus/w1/devices/" + sensor.strip() + "/w1_slave") as fp1:
                    sensor_data = fp1.read()
                    print(sensor_data.strip())
                sensor=fp.readline()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2017-10-12
      • 2020-11-30
      • 2015-05-22
      • 1970-01-01
      相关资源
      最近更新 更多