2015-11-04 2 views
-1

У меня есть эта функцияфункция Python, возвращая значение False и None

def postData(): 
    data = doPOst() 
    if data.result == "success": 
     return data 
    if data.result == "fail": 
     return false 

Тогда я, основанный на возвращении я должен сделать что-то вроде

if ret is None: 
    pass # 1 
if ret is False: 
    pass # 2 
else: 
    normal 

Я хочу знать, что будет None и Ложные получить смешанный

+0

ли вы имеете в виду 'вернуть false' или' вернуть false'? Кроме того, как «данные» могут быть «Нет»? Кажется, вы либо возвращаете что-то, либо возвращаете False –

+0

@JohnColeman Ни один не будет rturned, если для некоторого reaosn postcall timeout и нет данных там –

+0

@JohnKaff, если doPost() возвращает None, тогда ifs потерпит неудачу с AttributeErrors (поскольку None будет не имеет атрибута результата) – Sebastian

ответ

3

Если вы явно указали на None и False, то нет, они не будут объединены.

if ret is None: # entered only on None 
    pass 
elif ret == False: # entered only on False or 0 
    pass 
else: 
    pass 

Если вы только что проверил для значений truthy/falsey, они получили бы в сочетании:

if ret: 
    pass 
else: # entered on None or False 
    pass 
+0

В чем отличие использования if, но не elif. –

+1

@JohnKaff, если вы возвращаетесь в каждом случае, тогда общее поведение будет таким же. Тем не менее, IMHO лучше использовать elifs, поскольку они более подробно описывают рассуждения в коде (то есть тот факт, что они являются взаимоисключающими результатами) – Sebastian

+0

Джон, я хотел уточнить, что if vs. elif не имеет отношения к вашему исходному вопросу. Обратите внимание, что первый пример Tigerhawk явно проверяет, является ли ret None, или False, или что-то еще. В его втором примере None, False и 0 будут считаться одинаковыми. – Tom

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