当前位置: 首页 > 面试题库 >

Python Argparse:带有负数的可选参数的问题

郑正阳
2023-03-14
问题内容

我有一个小问题argparse。我有一个选择xlimxrange情节的。我希望能够传递类似的数字-2e-5。但是,这不起作用-argparse解释这是一个位置参数。如果我这样做了,请执行以下操作-0.00002argparse将其读取为负数。是否可以阅读-2e-3

下面的代码,和我将如何运行它的一个示例是:

./blaa.py --xlim -2.e-3 1e4

如果我执行以下操作,则可以:

./blaa.py --xlim -0.002 1e4

编码:

parser.add_argument('--xlim', nargs = 2,
                  help = 'X axis limits',
                  action = 'store', type = float, 
                  default = [-1.e-3, 1.e-3])

尽管我可以使它以这种方式工作,但我确实更希望能够使用科学计数法。谁有想法?

干杯


问题答案:

正如评论所指出的那样,问题在于-前缀被解析为选项而不是参数。解决此问题的一种方法是使用prefix_chars参数更改用于选项的前缀:

#!/usr/bin/python
import argparse

parser = argparse.ArgumentParser(prefix_chars='@')
parser.add_argument('@@xlim', nargs = 2,
                  help = 'X axis limits',
                  action = 'store', type = float,
                  default = [-1.e-3, 1.e-3])
print parser.parse_args()

输出示例:

$ ./blaa.py @@xlim -2.e-3 1e4
Namespace(xlim=[-0.002, 10000.0])

编辑:或者,您可以继续-用作分隔符,xlim作为单个值传递并使用函数type 来实现自己的解析:

#!/usr/bin/python
import argparse

def two_floats(value):
    values = value.split()
    if len(values) != 2:
        raise argparse.ArgumentError
    values = map(float, values)
    return values

parser = argparse.ArgumentParser()
parser.add_argument('--xlim', 
                  help = 'X axis limits',
                  action = 'store', type=two_floats,
                  default = [-1.e-3, 1.e-3])
print parser.parse_args()

输出示例:

$ ./blaa.py --xlim "-2e-3 1e4"
Namespace(xlim=[-0.002, 10000.0])


 类似资料:
  • 但是,如果Terminal中没有提供,我不知道如何(或者是否能够)为其设置默认值。像这样简单的东西不起作用。这里的一个解决方案是根据的内容或大小在函数中设置变量。但我不知道有没有更好的办法做到这一点。 因此,我正在寻找一种方法来使用来自终端的参数调用一个函数,其中需要一个数字(在本例中为2),而其余的是可选的,并设置为默认值。

  • 问题内容: 我正在向数据库中插入大约500 000个对象,其中许多对象是相同的(数据库中具有相同的主键表示),但是其他字段可能不同,因此我使用的方法是“更新-如果没有受影响的行-插入”。问题在于,有时对象的某些字段设置为null(无法从文件读取),并且已经在数据库中设置了某些值,因此我将其更新为null =删除它。)如何实现方案,即只更新字段不为空? 这是我现在如何做的一个简单示例: 问题答案:

  • 在下面的代码中,我有时会将设置为null。此时,它抛出错误为“could not extract resultset;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammarexception:could not extract resultset” 即使为空,我如何获取数据。总有一天约会就要来了。这是怎么做的? null

  • 问题内容: 显然,以下代码不会按预期方式打印出任何内容。.我确信这与我尝试将项目列表放入中的事实有关。显然,这不仅仅是文本替换。 我怎么解决这个问题?谢谢 问题答案: 不幸的是,SQL参数不能以这种方式 解析 ,换句话说,后端不只是构建一个安全字符串来替换每个参数的值。相反,您必须动态构建参数列表: 然后添加每个参数: 如果在运行时之前还不知道这些参数,那么您当然可以在循环中添加这些参数: 如果您

  • 问题内容: 使用Hibernate时,有什么方法可以在命名查询中指定可选参数(例如,从表单提供搜索参数而并非所有参数都是必需的)?我正在使用本机SQL查询,但该问题可能也适用于命名HQL查询。 我很确定对此的答案是“否”,但是我还没有在文档中找到确切的答案。 问题答案: AFAIK,没有这样的事情,因此您必须为此编写一个动态查询。也许看一下以前的答案,该答案显示了如何在HQL中执行此操作(您可以将

  • 问题 你想写一个装饰器,既可以不传参数给它,比如 @decorator , 也可以传递可选参数给它,比如 @decorator(x,y,z) 。 解决方案 下面是9.5小节中日志装饰器的一个修改版本: from functools import wraps, partial import logging def logged(func=None, *, level=logging.DEBUG,