热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解决Python3.x中argparse无法识别含&符号的输入参数问题

在使用Python3.x的argparse模块时,如果输入参数中包含&符号,会遇到解析错误。本文介绍了如何解决这一问题,确保输入参数能够正确解析。

在使用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模块时,输入参数中包含&符号也能被正确解析。


推荐阅读
author-avatar
我是老头168
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有