Python - NameError
Question: I have the following code that uses 3 strings 'us dollars','euro',
'02-11-2014', and a number to calculate the exchange rate for that given date.
I modified the code to pass those arguments but I get an error when I try to
call it with

    
    
    python currencyManager.py "us dollars" "euro" 100 "02-11-2014"
    

* * *
    
    
    Traceback (most recent call last):
      File "currencyManager.py", line 37. in <module>
        currencyManager(currTo,currFrom,currAmount,currDate)
    NameError: name 'currTo' is not defined
    

I'm fairly new to Python so my knowledge is limited. Any help would be greatly
appreciated. Thanks. Also the version of Python I'm using is 3.4.2.

    
    
    import urllib.request
    import re
    
    def currencyManager(currTo,currFrom,currAmount,currDate):    
        try:
            currency_to =  currTo #'us dollars'
            currency_from = currFrom #'euro'
            currency_from_amount = currAmount
            on_date = currDate # Day-Month-Year
    
            currency_from = currency_from.replace(' ', '+')
            currency_to = currency_to.replace(' ', '+')
    
            url = 'http://www.wolframalpha.com/input/?i=' + str(currency_from_amount) + '+' + str(currency_from) + '+to+' + str(currency_to) + '+on+' + str(on_date)
            req = urllib.request.Request(url)
    
            output = ''
            urllib.request.urlopen(req)
    
            page_fetch =  urllib.request.urlopen(req)
            output = page_fetch.read().decode('utf-8')
    
            search = '<area shape="rect.*href="\/input\/\?i=(.*?)\+.*?&lk=1'
            result = re.findall(r'' + search, output, re.S)
    
            if len(result) > 0:
                amount = float(result[0])
                print(str(amount))
            else:
                print('No match found')
        except URLError as e:
                print(e)
    currencyManager(currTo,currFrom,currAmount,currDate)
    


Answer: The command line

    
    
    python currencyManager.py "us dollars" "euro" 100 "02-11-2014"
    

does not automatically assign "us dollars" "euro" 100 "02-11-2014" to
currTo,currFrom,currAmount,currDate. Instead the command line arguments are
stored in a list,
[sys.argv](https://docs.python.org/2/library/sys.html#sys.argv). You need to
parse sys.argv and/or pass its values on to the call to currencyManager:

For example, change

    
    
    currencyManager(currTo,currFrom,currAmount,currDate)
    

to

    
    
    import sys
    currencyManager(*sys.argv[1:5])
    

* * *

The first element in `sys.argv` is the script name. Thus `sys.argv[1:5]`
consists of the next 4 arguments after the script name (assuming 4 arguments
were entered on the command line.) You may want to check that the right number
of arguments are passed on the command line and that they are of the right
type. [The `argparse` module](https://docs.python.org/3/library/argparse.html)
can help you here.

The `*` in `*sys.argv[1:5]` [unpacks the
list](http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-
python/) `sys.argv[1:5]` and passes the items in the list as arguments to the
function `currencyManager`.

