I am writing a program that uses urllib2 to download CSV data from an http site. The program works fine when run within Python, however I am also trying to use argparse to be able to enter the url from the command line.
I get the following error when I run it:
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'
I guess this is part of the urllib2 library because it is not code that I have written. Has anybody else encountered similar problems with either the argparse or urllib2 modules?
The relevant part of the code is as follows:
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)
You're parsing command line arguments into args
, which is a Namespace
with attributes set to the parsed arguments. But you're passing this entire namespace to downloadData
, rather than just the url. This namespace is then passed to urlopen
, which doesn't know what to do with it. Instead, call downloadData(args.url)
.
Long story short.
Arguments in object returned from parser.parse_args()
should be accessed via properties rather than via []
syntax.
args = parser.parse_args() args['method']
args = parser.parse_args() args.method
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With