如何解决IDE和命令行中的结果不同,布尔值似乎会改变值
我有一个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。
解决方法
False
是从argparse中获取的,它是字符串,与合成检查不同,它是实际的布尔值。
Argparse没有对布尔文字进行隐式解析,因此除了手动解析外,最好的方法是使用action='store_false'
并将参数作为标志传递
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。