2015-02-10 85 views
8

我在写一个程序,它使用urllib2从http站点下载CSV数据。该程序在Python中运行时工作正常,但我也试图使用argparse能够从命令行输入url。AttributeError:'命名空间'对象没有任何属性

我收到以下错误,当我运行它:

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库的一部分,因为它不是我写的代码。 有没有其他人遇到与argparseurllib2模块类似的问题?

代码的相关部分如下:

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) 
+0

堆栈跟踪当然表明'urllib2'模块中的一个问题,来自给出的路径。 – nbro 2015-02-10 02:06:41

+0

向我们展示您所写的代码以及您所提供的输入。 – 2015-02-10 02:24:15

+0

您发布的代码不包含包含错误的行。你有什么要求? – 2015-02-11 22:08:04

回答

8

你解析命令行参数为args,这是一个Namespace设置为解析参数属性。但是您将整个名称空间传递给downloadData,而不仅仅是url。这个命名空间然后被传递给urlopen,它不知道该如何处理它。相反,请致电downloadData(args.url)

相关问题