2017-04-18 311 views
0

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

的代码如下:

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变量。我究竟做错了什么?

+3

那么首先这不是做你想:'如果DEVICELIST ==“SNUM”或“枚举”:',它会评估为true第二'或'条件因为它被看作是'或'enum'',它将字符串转换为'True',你想要'如果devicelist ==“snum”或devicelist ==“enum”:'第二,在这里定义了上下文的位置? – EdChum

+0

@EdChum你对'if'正确,但你已经阅读上下文,而不是'content',它的值是'content = f.readlines()' – WhatsThePoint

+3

可能重复[如何测试一个变量对多个值?]( http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values) – Lafexlos

回答

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

将始终为真。

这是编译器会检查:

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

第一次检查是False,而铸造"enum"为布尔第二次检查是始终True

解决方法:

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