让我们有一个简单的argparser,其中包含一个表示URL的参数。
from argparse import ArgumentParser
def my_url(arg):
"""
Some url validation
"""
parser = ArgumentParser(
description="foobar"
)
parser.add_argument(
"-u",
"--url",
type=my_url,
help="foobar",
)
是否准备好采取函数来验证参数是否为 URL,以便省略my_url
自定义验证函数?
您可以使用urllib.parse
中的urlparse
函数,并检查它是否能够从URL中提取所有必需的组件:
from urllib.parse import urlparse
def my_url(arg):
url = urlparse(arg)
if all((url.scheme, url.netloc)): # possibly other sections?
return arg # return url in case you need the parsed object
raise ArgumentTypeError('Invalid URL')
结果:
parser.parse_args(['-u', 'http://locahost:2000']) # pass
parser.parse_args(['-u', 'http/locahost:2000']) # Invalid URL
parser.parse_args(['-u', 'thisisurl']) # Invalid URL