作者:我是老头168 | 来源:互联网 | 2024-11-17 11:11
在使用Python 3.x的argparse模块时,如果输入参数中包含&符号,会遇到解析错误。本文将详细介绍如何解决这一问题,确保输入参数能够正确解析。
问题描述:使用argparse时,输入值不能带&符号,导致解析错误。
使用的Python版本:v3.3
测试代码如下:
import argparse
def urlType(rawValue):
if not rawValue.startswith('http'):
value = 'http://' + rawValue
else:
value = rawValue
return value
parser = argparse.ArgumentParser(description='A Web crawler')
parser.add_argument('-u', type=urlType, required=True, metavar='URL', dest='url', help='Specify the begin url')
print("-----------------------------")
args = parser.parse_args()
print(args)
测试命令及结果:
argtest.py -u http://tieba.baidu.com%ere&2
Namespace(url=’http://tieba.baidu.com%ere’)
’2’ 不是内部或外部命令,也不是可运行的程序
解决方案:
1. 在单个&符号前加上上尖括号^进行转义:
argparse_ampersand.py -u http://tieba.baidu.com%ere^&2
2. 给整个参数加上双引号:
argparse_ampersand.py -u "http://tieba.baidu.com%ere&2"
3. 给整个参数加上单引号:
argparse_ampersand.py -u ‘http://tieba.baidu.com%ere&2’
4. 给整个参数部分加上双引号:
argparse_ampersand.py "-u http://tieba.baidu.com%ere&2"
虽然第4种方法可以解决问题,但会导致解析后的值包含多余的空格,因此不推荐使用。建议使用第1、2或3种方法。
正确的解析结果示例:
Namespace(url='http://tieba.baidu.com%ere&2')
总结:通过上述方法,可以确保在使用argparse模块时,输入参数中包含&符号也能被正确解析。