处理浮点参数 python

handling float arguments python

我有一个带有可选参数的函数,如下所示:

myProgram -n 8

我想添加错误处理,如果用户输入的参数是浮点数,它将退出程序并打印一条错误消息。如果参数总是以字符串形式出现,我将如何对此进行测试?

你或许可以这样做:

from math import modf

if modf(float(args.n))[0] != 0.0:
    # ERROR: Float entered!

来自 math.modf 文档:

math.modf(x)¶ Return the fractional and integer parts of x. Both results carry the sign of x and are floats.

或者(@dawg 提到的):

"." in args.n  # A possible float

# or

args.n.isdigit()  # Returns False if args.n does not contain all digits only

使用str.isdigit():

>>> '12345'.isdigit()
True
>>> '12.345'.isdigit()
False

如果要支持负数,先去掉符号:

>>> '+12345'.strip(' -+').isdigit()
True
>>> '-12345'.strip(' -+').isdigit()
True

要解析命令行参数,您应该使用 argparse

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-n", type=int)
    args = parser.parse_args()

    print args

if __name__ == '__main__':
    main()

用法:

[10:39pm][wlynch@watermelon /tmp] python blah.py
Namespace(n=None)
[10:39pm][wlynch@watermelon /tmp] python blah.py -n 4
Namespace(n=4)
[10:39pm][wlynch@watermelon /tmp] python blah.py -n 4.0
usage: blah.py [-h] [-n N]
blah.py: error: argument -n: invalid int value: '4.0'

乍一看似乎很笨重,但 argparse 模块可以完全满足您的需求。页面上的第一个示例显示了一个纯整数参数(注意 type=int 部分):

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')

python deleteme.py 3.5 调用该示例(即 3.5 是应该为整数的参数)会给出以下输出:

usage: scriptname.py [-h] [--sum] N [N ...]
scriptname.py: error: argument N: invalid int value: '3.5'