处理浮点参数 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
>>> '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'
我有一个带有可选参数的函数,如下所示:
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
>>> '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'