2013-08-09 4 views
0

Привет я struging, чтобы получить мою голову раунд уровни indentaion с этим code-Python отступы новичку

def getSolarFlowtemperature(): 

    #Open the temperature sensor, read it and process the result 
    tfile = open("/sys/bus/w1/devices/28-000003086819/w1_slave") 
    text = tfile.read() 
    tfile.close() 
    temperature_data = text.split()[-1] 
    temperature = float(temperature_data[2:]) 
    temperature = temperature/1000 

    #This while function checks for the error temperatures, and tries to read the sensor again to get a proper value. After 10 tries it stops 
    count = 0 
    while temperature == -0.062 or temperature == -0.125: 
      time.sleep(2) 
      count = count + 1 
      print 'Temperature error on 28-000003086819, retrying' 
      tfile = open("/sys/bus/w1/devices/28-000003086819/w1_slave") 
      text = tfile.read() 
      tfile.close() 
      temperature_data = text.split()[-1] 
      temperature = float(temperature_data[2:]) 
      temperature = temperature/1000 
    if count > 10: 
    break 

    else: 

    return(temperature) 

Может кто-нибудь посоветовать, где отступы неверна?

Стив

ответ

4

Условный/остальное должно быть в то время, и их код должен быть отступом, перерыв не имеет смысла вне цикла

def getSolarFlowtemperature(): 
    #Open the temperature sensor, read it and process the result 
    tfile = open("/sys/bus/w1/devices/28-000003086819/w1_slave") 
    text = tfile.read() 
    tfile.close() 
    temperature_data = text.split()[-1] 
    temperature = float(temperature_data[2:]) 
    temperature = temperature/1000 

    #This while function checks for the error temperatures, and tries to read the sensor again to get a proper value. After 10 tries it stops 
    count = 0 
    while temperature == -0.062 or temperature == -0.125: 
      time.sleep(2) 
      count = count + 1 
      print 'Temperature error on 28-000003086819, retrying' 
      tfile = open("/sys/bus/w1/devices/28-000003086819/w1_slave") 
      text = tfile.read() 
      tfile.close() 
      temperature_data = text.split()[-1] 
      temperature = float(temperature_data[2:]) 
      temperature = temperature/1000 
      if count > 10: 
       break 
      else: 
       return(temperature) 
+0

Спасибо за это, хотел бы получить больше советов относительно разрыва, не имеющего смысла, где он есть. Это код, который я снял и модифицировал для своего использования, поскольку я новичок :) Идея состоит в том, что функция пытается в 10 раз получить значение, которое я считаю. –

+0

Перерыв, вырвется из структуры цикла и остановит итерации, поэтому он должен быть как бы вложен в петлю. Здесь мы видим разрыв в if, если в то время как разрыв относится к while. Если бы был еще один цикл, он вырвался бы из внутреннего цикла. Использование break out из контекста цикла невозможно, и это ничего не значит, потому что не будет итерации, чтобы остановить, попробуйте, вы получите сообщение об ошибке :) – lc2817

0
if count > 10: 
break 
else: 
return(temperature) 

если-то еще условия должны быть отступы, а также. Это должно быть

if count > 10: 
    break 
else : 
    return temperature 

Некоторые другие примечания:

return temperature не нужны круглые скобки, как у вас есть.

Кроме того, чтобы открыть файл, прочитать его и близкое его, вы можете просто сделать это:

with open("/sys/bus/w1/devices/28-000003086819/w1_slave", "r") as tfile : 
    text = tfile.read() 

Это гарантирует, что дескриптор файла закрывается даже в случае исключения. Кроме того, я передал второй аргумент r, который указывает, что файл должен быть открыт только в режиме чтения.

+0

Аргумент только для чтения не требуется, так как это является режимом по умолчанию. –

+0

Спасибо за это, я внес изменения, которые вы предлагаете. Правильно ли я думаю, что вторая строка предлагаемого кода для открытия, чтения и закрытия файла должна быть отступом? –

+0

Да, он должен быть отступом – xbonez

0

в то время как блок indentaion должен быть таким:

while temperature == -0.062 or temperature == -0.125: 
    time.sleep(2) 
    count = count + 1 
    print 'Temperature error on 28-000003086819, retrying' 
    tfile = open("/sys/bus/w1/devices/28-000003086819/w1_slave") 
    text = tfile.read() 
    tfile.close() 
    temperature_data = text.split()[-1] 
    temperature = float(temperature_data[2:]) 
    temperature = temperature/1000 
-1
while temperature == -0.062 or temperature == -0.125: 
      time.sleep(2) 
      count = count + 1 
      print 'Temperature error on 28-000003086819, retrying' 
      tfile = open("/sys/bus/w1/devices/28-000003086819/w1_slave") 
      text = tfile.read() 
      tfile.close() 
      temperature_data = text.split()[-1] 
      temperature = float(temperature_data[2:]) 
      temperature = temperature/1000 

Должно быть только 4, почему вы положили 8 пробелов? Попробуй это! :)

РЕДАКТИРОВАТЬ: И если утверждения, что-либо под a if: должно быть отступом 4 пробела! то же самое с elif и еще! :)

+0

1 space indention - то, что используют profs! Нет серьезно, python может иметь любое количество пробелов в белом пространстве, как вы и ваша рабочая среда. Хотите 2? используйте 2, хотите 8? используйте 8. Ничего плохого в этом. –

0

Существует проблема вдавливания в случае заявления:

if count > 10: 
    break 
else: 
    return(temperature) 

Смежные вопросы