【发布时间】:2021-01-02 16:02:07
【问题描述】:
我有一个 Python 3 程序,其中我有一个奇怪的行为,我将其简化为下面非常基本的 MWE:
# -*- coding: utf-8 -*-
# basic_test.py
import argparse
def fun(arg1):
print("arg1 value right before test: ", arg1)
if arg1:
print("inside test")
# fun(False) # comment if not in IDE mode
### comment following section if in IDE mode
if __name__ == "__main__":
argparser = argparse.ArgumentParser()
argparser.add_argument("-a")
args = argparser.parse_args()
fun(args.a)
如果我通过调用python basic_test.py -a False 在命令行中运行上面的代码,我会得到以下奇怪的(在我看来)输出:
arg1 value right before test: False
inside test
所以不知何故,arg1 在一行是False,而在下一行是True,因为输入了if 部分?为什么会这样?
此外,如果我注释“main”部分,并取消注释行 fun(False),并将该代码运行到 IDE(在我的情况下为 Spyder),它会按我的预期运行,并具有以下输出:
arg1 value right before test: False
所以它确实没有进入if 部分。
如果这很重要,我正在 Windows 上运行 Python 3.7.6。
【问题讨论】:
标签: python command-line boolean spyder argparse