【问题标题】:Issues with using argparse with listcomprehensions将 argparse 与 listcomprehensions 一起使用的问题
【发布时间】:2015-02-20 19:05:59
【问题描述】:

我正在使用列表推导来查找 PyTable 中的特定数据集。但是,当尝试与来自 argparser 的参数结合时,它不会返回任何值。

下面是这段代码:

if args.Scount:
    print args.Scount, args.Scount[0], args.Scount[1]

    print 
    print [row['GRBname'] for row in table.iterrows() if args.Scount[0] <= row['SCounts'] <= args.Scount[1]]
    print

    print [row['GRBname'] for row in table.iterrows() if 0 <= row['SCounts'] <= 10]

args.Scount 来自哪里:

parser.add_argument("--Scount", nargs=2, help="Used to display GRBs within the specified spectral count range")

例如,如果我给 --Scount 0 和 10:

第一行打印 ['0', '10'] 0 10(这只是一个检查 args 是否有值的测试)

第二行打印[]

第三行打印一个列表,其中包含row['Scount'] 条件内选定的row['GRBname']。

如果我切换回标准循环结构,我会得到相同的结果,尽管搜索 pytable、a​​rgparse 和列表理解文档并没有帮助我解决这个特定问题。

【问题讨论】:

  • 您的具体问题是什么?您的观察让我们感到高兴,但您想知道什么?
  • table.iterrows() 看起来像一个迭代器,它可能会被第二次调用耗尽?

标签: python argparse pytables


【解决方案1】:

您正在将字符串与整数进行比较;这可能在 Python 2.7 中有效,但数字总是被认为比字符串“小”(在字符串之前排序)。

如果您希望进行数值比较,您也不应该将字符串与字符串进行比较。 '9' 大于 '10',因为 1 排在 9 之前(字符串按字典顺序进行比较):

>>> '1' < 9
False
>>> '9' < '10'
False

向argparse 询问整数:

parser.add_argument(
    "--Scount", nargs=2, type=int,
    help="Used to display GRBs within the specified spectral count range")

如果还没有,也将row['Scount'] 转换为整数:

[row['GRBname'] for row in table.iterrows()
 if args.Scount[0] <= int(row['SCounts']) <= args.Scount[1]]

【讨论】:

  • 叹息,我似乎从来没有发现愚蠢的错误。添加 type=int 效果很好,谢谢
猜你喜欢
  • 2014-04-07
  • 2015-03-11
  • 2020-11-05
  • 2014-11-25
  • 2013-05-12
  • 2015-05-29
  • 2015-01-28
  • 2019-04-12
  • 2020-11-17
相关资源
最近更新 更多