我正在编写一个使用 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)
答案 0 :(得分:15)
您将命令行参数解析为args
,这是一个Namespace
,其属性设置为已解析的参数。但是您将整个命名空间传递给downloadData
,而不仅仅是网址。然后将此命名空间传递给urlopen
,downloadData(args.url)
不知道如何处理它。相反,请致电{{1}}。
答案 1 :(得分:1)
长话短说。
从parser.parse_args()
返回的对象中的参数应该通过属性而不是通过[]
语法来访问。
args = parser.parse_args()
args['method']
args = parser.parse_args()
args.method
答案 2 :(得分:0)
由于选项刺之前有空格,我遇到了这个问题。