【问题标题】:Why would the validation 'if not set(sys.argv)' be needed?为什么需要验证“如果未设置(sys.argv)”?
【发布时间】:2017-05-17 22:39:04
【问题描述】:

我正在尝试理解下一个验证的第一部分。我可以安全地假设表达式“if not set(sys.argv)”总是 False 吗?代码来自Ironic Project

if not set(sys.argv) & valid_commands:

根据docs,如果命令使用'-c' 选项运行,则argv[0] 设置为字符串'-c'。这仍然是一个非空集。示例:

python -c '
import sys
print(sys.argv[0])
if not set(sys.argv):
    print("empty")
else:
    print("non-empty")
'

【问题讨论】:

  • 不,您不能安全地假设表达式if not set(sys.argv) 始终为假。您的程序之前可能已经清除了sys.argv
  • 如果您使用 Python C API 调用脚本,sys.argv 也可能为空。

标签: python sys


【解决方案1】:

你读错了。 Python 的not 的优先级非常低,低于&(这不是逻辑与)。

if not set(sys.argv) & valid_commands:

应该读作

if not (set(sys.argv) & valid_commands):

这是测试sys.argv 是否包含集合valid_commands 的任何元素。

【讨论】:

    【解决方案2】:

    这里没有“第一部分”。

    if not set(sys.argv) & valid_commands:
    

    等价于

    if not (set(sys.argv) & valid_commands):
    

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2021-08-14
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2018-11-28
      相关资源
      最近更新 更多