在Python中,如何测试变量是None、True还是Fals

2024-04-19 17:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数可以返回以下三项之一:

  • 成功(True
  • 失败(False
  • 读取/分析流时出错(None

我的问题是,如果我不应该对TrueFalse进行测试,我应该如何看到结果。以下是我目前的做法:

result = simulate(open("myfile"))
if result == None:
    print "error parsing stream"
elif result == True: # shouldn't do this
    print "result pass"
else:
    print "result fail"

它真的像删除== True部分那么简单吗,还是应该添加一个tri-bool数据类型。我不想让simulate函数抛出异常,因为我只想让外部程序处理一个错误并记录它并继续。


Tags: 函数nonefalsetruestreamiferrorresult
3条回答
if result is None:
    print "error parsing stream"
elif result:
    print "result pass"
else:
    print "result fail"

保持简单明了。你当然可以预先定义一本字典。

messages = {None: 'error', True: 'pass', False: 'fail'}
print messages[result]

如果计划修改simulate函数以包含更多返回代码,那么维护此代码可能会有点麻烦。

simulate还可能引发解析错误的异常,在这种情况下,您要么在这里捕获它,要么让它向上传播一个级别,打印位将减少为一行if else语句。

别害怕例外!让您的程序只需登录并继续即可:

try:
    result = simulate(open("myfile"))
except SimulationException as sim_exc:
    print "error parsing stream", sim_exc
else:
    if result:
        print "result pass"
    else:
        print "result fail"

# execution continues from here, regardless of exception or not

现在,您可以从simulate方法获得更丰富的通知类型,以了解究竟发生了什么错误,以防您发现error/no error信息量不够。

从不,从不,从不说

if something == True:

从来没有。这太疯狂了,因为您在重复被冗余地指定为if语句的冗余条件规则的内容。

更糟的是,永远,永远,永远,永远

if something == False:

你有not。请随意使用。

最后,做a == None是低效的。做a is NoneNone是一个特殊的单粒子对象,只能有一个。看看你有没有那个东西。

相关问题 更多 >