1

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)
2
  • Can you provide the full error? including the line that raise an error and the error message? Commented Nov 2, 2014 at 14:14
  • On the last line you use the variables currTo, currFrom, currAmount and currDate, but these variables haven't been initialized yet. Commented Nov 2, 2014 at 14:17

1 Answer 1

4

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. 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 can help you here.

The * in *sys.argv[1:5] unpacks the list sys.argv[1:5] and passes the items in the list as arguments to the function currencyManager.

Sign up to request clarification or add additional context in comments.

1 Comment

welcome to S.O! If you found this helpful, mark it as a valid answer to help future reader to find right answers.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.