如何检查是否只有一个 argparse 参数存在

How to check if only one of the argparse parameters exists

如代码中,有两个parser.add_argument --date 和--type。如果 --type 存在,我想使用另一个函数。如何检查 --type 是否存在? 我试过了,但失败了

 parser = argparse.ArgumentParser()
 parser.add_argument('--date', default=str(startDate))
 parser.add_argument('--type', required=False)
 args = parser.parse_args()
 if len(args.type) > 0:
    dataFrame = spDataFrame[nospDataFrame['Type'] == args.type].reset_index(drop=True)
 else:
    campDataframe = sp_camp_mapping(startDate, endDate, keyword, driver, filePath)
    sp_mapping(campDataframe, driver, startDate) 

ERROR:None type has no len

如果未传递 --type 参数,则 args 中的键 type 的值为 None 并且:

    len(None)
    Traceback (most recent call last):
      File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.2.1\plugins\python-ce\helpers\pydev\_pydevd_bundle\pydevd_exec2.py", line 3, in Exec
        exec(exp, global_vars, local_vars)
      File "<input>", line 1, in <module>
    TypeError: object of type 'NoneType' has no len()

您可以直接检查 args.type 的值:

import argparse

startDate = '20210209'
parser = argparse.ArgumentParser()
parser.add_argument('--date', default=str(startDate))
parser.add_argument('--type', required=False)
args = parser.parse_args()
if args.type:
    print("Type parameter was passed: {}".format(args.type))
else:
    print("Type parameter wasn't passed: {}".format(args.type))

注:if args.type等同于if args.type is not None: