Python if语句在false和true上执行

时间:2017-04-18 14:07:43

标签: python

我在脚本中遇到一些if语句时遇到问题。我使用./iojson.py "nodev"从终端运行,但代码仍然执行"enum""snum"的if语句,这导致我的脚本因NameError而停止。

代码如下:

devicelist = sys.argv[1]
if devicelist == "snum" or "enum":
    if devicelist == "snum":
        print("It executed snum")
        with open('SNUM.txt') as f:
            content = f.readlines()
    if devicelist == "enum":
        print("It executed enum")
        with open('ENUM.txt') as f:
            content = f.readlines()
    content = [x.strip() for x in content]
    devices = ''.join(content)
    data['attachments'].append({
        'fields' : [{
            'title' : 'Serial numbers:',
            'value' : devices
            }]
        })
elif devicelist == "nodev":
    print("It executed nodev")
    pass

执行后,响应为:

Traceback (most recent call last):
  File "./iojson.py", line 43, in <module>
    content = [x.strip() for x in content]
NameError: name 'content' is not defined

我的理解是,它首先应该永远不会得到content变量。我做错了什么?

1 个答案:

答案 0 :(得分:3)

if devicelist == "snum" or "enum":

永远是真的。

这是编译器将检查的内容:

if (devicelist == "snum") or "enum":

第一项检查是False,而第二次检查是否将"enum"转换为布尔值始终为True

解决方法:

if devicelist in ("snum", "enum"):