我有一个非常相似的问题,但提供的解决方案不适合,因为我的用例略有不同。为简单起见,我会将我的问题调整为已经回答的问题。
是否可以以不区分大小写的方式检查argparse 选择,而不会丢失区分大小写的信息?
import argparse
choices = ["ADASYN", "BorderlineSMOTE", "KMeansSMOTE"]
parser = argparse.ArgumentParser()
parser.add_argument("-p", choices=choices)
print(parser.parse_args(["-p", "adasyn"]))
这将导致:
choices.py: error: argument -p: invalid choice: 'adasyn' (choose from 'ADASYN', 'BorderlineSMOTE', 'KMeansSMOTE')
我显然可以使用type.lower,但是我的选择列表需要小写,并且我失去了 -h 的很多可读性(帮助输出)。另一方面,我希望我的用户能够使用不同的大小写,只要两者的字符串 .lower() 相同。
@hpaulj提供的解决方案(类似问题)在我的情况下不起作用。它只使参数输入具有任意大小写。因此,如果我的选择列表是小写的, AdAsyN会起作用,但如果我将选择列表保留在 CamelCase 中,则选择列表中的大写字母也必须是大写的参数。
有没有人为我提供解决方案,我可以在其中保留我的选择列表的大小写,同时完全忽略用户输入的大小写?