если условие не выполнено, но все еще печатает «if» во вложенных операторах if с циклом for - PullRequest
0 голосов
/ 01 мая 2020

Почему этот код никогда не переходит в "else" и печатается соответствующим образом, когда условие в "if" не выполняется?

j=0
for i in data:
  if j<10:

    if i['product']['id'] == p_id:
        if (i['stop_price']!='None'):
            print("Order Type:" +  str(i['stop_order_type']))
            print("Stop Price: " + str(i['stop_price']))

        else:
            print("Order Type: " + str(i['order_type']))



        print("Limit Price: " + str(i['limit_price']))
        print("Side: " + str(i['side']))
        print("Size: " + str(i['size']))
        print("Unfilled Size: " + str(i['unfilled_size']))

        print("\n\n")

    j+=1

Он печатает следующий вывод:

Order Type:stop_loss_order
Stop Price: 405.0
Limit Price: 400.0
Side: buy
Size: 1
Unfilled Size: 1



Order Type:None
Stop Price: None
Limit Price: 280.0
Side: sell
Size: 1
Unfilled Size: 0



Order Type:None
Stop Price: None
Limit Price: 300.0
Side: sell
Size: 1
Unfilled Size: 1

Но правильный вывод должен быть:

Order Type:stop_loss_order
Stop Price: 405.0
Limit Price: 400.0
Side: buy
Size: 1
Unfilled Size: 1



Order Type:Limit
Limit Price: 280.0
Side: sell
Size: 1
Unfilled Size: 0



Order Type:Limit
Limit Price: 300.0
Side: sell
Size: 1
Unfilled Size: 1

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Измените 'None' на голое None. Вы сравниваете его со строкой 'None', которая обычно будет False, если она на самом деле не является строкой 'None'.

Она должна выглядеть следующим образом:

    if (i['stop_price'] != None):

Обратите внимание, что в случае сравнения с None это немного эффективнее:

    if (i['stop_price'] is not None):

Тьерри Латюль отмечает, что последнее рекомендуется ПКП 8 Рекомендации по программированию . Обе версии должны вести себя одинаково.

0 голосов
/ 01 мая 2020

Проверьте значение и тип i ['stop_price'] в строке if (i ['stop_price']! = 'None') и соответствующим образом измените условие.

Здесь вы пытаетесь проверить значение i ['stop_price'] не должно равняться 'None' типа String, которое всегда может быть True, если фактическое значение в i ['stop_price'] не равно 'None' типа String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...