Python 属性错误:';名称空间';对象没有属性

Python 属性错误:';名称空间';对象没有属性,python,Python,我正在编写一个程序,使用urllib2从http站点下载CSV数据。该程序在Python中运行时运行良好,但是我也尝试使用argparse从命令行输入url 我在运行时遇到以下错误: File "urlcsv.py", line 51, in downloadData return urllib2.urlopen(url) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urll

我正在编写一个程序,使用urllib2从http站点下载CSV数据。该程序在Python中运行时运行良好,但是我也尝试使用argparse从命令行输入url

我在运行时遇到以下错误:

File "urlcsv.py", line 51, in downloadData
    return urllib2.urlopen(url)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 396, in open
    protocol = req.get_type()
AttributeError: 'Namespace' object has no attribute 'get_type'
我想这是urllib2库的一部分,因为它不是我编写的代码。 是否有其他人在argparse或urllib2模块中遇到过类似的问题

守则的有关部分如下:

parser = argparse.ArgumentParser()
parser.add_argument("url")


def main():
    """Runs when the program is opened"""

    args = parser.parse_args()
    if args is False:
        SystemExit
    try:
        csvData = downloadData(args)
    except urllib2.URLError:
        print 'Please try a different URL'
        raise
    else:
        LOG_FILENAME = 'errors.log'
        logging.basicConfig(filename=LOG_FILENAME,
                            level=logging.DEBUG,
                            )
        logging.getLogger('assignment2')
        personData = processData(csvData)
        ID = int(raw_input("Enter a user ID: "))
        if ID <= 0:
            raise Exception('Program exited, value <= 0')
        else:
            displayPerson(ID)
            main()

def downloadData(url):

    return urllib2.urlopen(url)
parser=argparse.ArgumentParser()
parser.add_参数(“url”)
def main():
“”“在程序打开时运行”“”
args=parser.parse_args()
如果args为False:
系统出口
尝试:
csvData=下载数据(args)
除urllib2.URLError外:
打印“请尝试其他URL”
提升
其他:
日志\文件名='errors.LOG'
logging.basicConfig(文件名=LOG\u文件名,
级别=logging.DEBUG,
)
logging.getLogger('assignment2')
personData=processData(csvData)
ID=int(原始输入(“输入用户ID:”)

如果ID您正在将命令行参数解析为
args
,这是一个
名称空间
,其属性设置为已解析的参数。但是您要将整个名称空间传递给
下载数据
,而不仅仅是url。然后将此名称空间传递给
urlopen
,后者不知道如何处理它。相反,请调用
downloadData(args.url)

长话短说

parser.parse_args()
返回的对象中的参数应通过属性而不是通过
[]
语法进行访问

错 对的
我有这个问题是因为选项前有一个空格

堆栈跟踪当然表明
urllib2
模块中存在问题,这与给定的路径有关。请向我们展示您编写的代码以及您提供的输入。您发布的代码不包括带有错误的行。您将
req
设置为什么?@tristan行
protocol=req.get_type()
是Python标准库中urllib2模块的一部分;我写的不是代码,而是由
urllib2.urlopen(url)
调用的代码,但是您没有在示例中包含设置
protocol=req.get_type()
,这意味着您仍然需要“发布代码”。我不知道您希望req存在于何处,因为没有成员方法
urllib2.req
。如果arg名称包含特殊字符怎么办?例如,我使用“”而不是“方法”。但是“args.”显然是无效的。@gye在参数名中不使用特殊字符吗?
args = parser.parse_args()
args['method']
args = parser.parse_args()
args.method