python - 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'
参数并将其作为标志传递
推荐阅读
- r - 创建一个计算表以显示八个基因列表中所有可能的组合对之间重叠基因的数量
- angular - 使用另一个变量的数字通过 Enum.[number] 调用枚举
- mysql - Mysql PDO 连接到外部服务器
- python - 获取 Falcon 应用程序中定义的所有路线的列表
- java - 数据库条目 onitemClick 的 getValue
- javascript - Aframe - Raycast 类过滤器在运行时不更新
- r - data.table 语法中的计算
- javascript - 响应式 html img 背景
- swift - 如何在 Swift Cocoa 中检测 OS X 中的用户不活动?
- javascript - 在 JQuery 中访问 iframe 的响应标头