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