就像我要解析127.0.0.1
一样,它可以被正确解析,但127.0.a.1
不是有效的IP地址,所以它应该抛出一个错误。如何在python中使用optparse?
要解析整数或字符串值,我们使用
parser.add_option("-n", action="store", type="int", dest="number")
但是为了解析有效的IP地址我们应该写什么?
答案 0 :(得分:0)
我认为使用此section of the optparse documentation,SO answer(与argparse完全相同的问题)可以适应optparse。
这个想法基本上如下:
因此,代码如下所示:
from copy import copy
from optparse import OptionParser, Option, OptionValueError
import re
# define checker function
def check_ip(option, opt, value):
try:
return re.match(r'(\d{3}(\.\d){3})', value).group(0) # I added some
# parethesis to the comment in order to define the IP as group(0)
except: # I think re.match().group() would raise an AttributeError, check it
raise OptionValueError(
"option %s: invalid IP value: %r" % (opt, value))
# define new optparse option
class MyOption(Option):
TYPES = Option.TYPES + ("IP",)
TYPE_CHECKER = copy(Option.TYPE_CHECKER)
TYPE_CHECKER["IP"] = check_ip
# use optparser with the new option
parser = OptionParser(option_class=MyOption)
parser.add_option("-c", type="IP")
检查您从re.match
获得的错误,并写下except <error_type>
。捕获任何异常(参见Why is "except: pass" a bad programming practice?)
另外考虑使用argparse而不是optparse,两者都在python2.7中工作。 Why use argparse rather than optparse?