繁体   English   中英

AttributeError: 'Namespace' 对象没有属性

[英]AttributeError: 'Namespace' object has no attribute

我正在编写一个使用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库的一部分,因为它不是我写的代码。 有没有其他人遇到过与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)

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

长话短说。

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

错误的

args = parser.parse_args()
args['method']

正确的

args = parser.parse_args()
args.method

由于选项刺痛之前的空格,我遇到了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM