Python - NameError

时间:2014-11-02 14:11:57

标签: python

我有以下代码使用3个字符串'us dollar','euro','02 -11-2014', 以及计算该给定日期的汇率的数字。我修改了 传递这些参数的代码,但是当我尝试使用

调用它时出现错误
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

我对Python很新,所以我的知识有限。任何帮助将不胜感激。谢谢。 我正在使用的Python版本是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)

1 个答案:

答案 0 :(得分:4)

命令行

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

不会自动将“us dollar”“euro”100“02-11-2014”分配给currTo,currFrom,currAmount,currDate。 相反,命令行参数存储在列表sys.argv中。 您需要解析sys.argv和/或将其值传递给对currencyManager的调用:

例如,更改

currencyManager(currTo,currFrom,currAmount,currDate)

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

sys.argv中的第一个元素是脚本名称。因此sys.argv[1:5]由脚本名称后面的后4个参数组成(假设在命令行中输入了4个参数。)您可能希望检查在命令行上传递了正确数量的参数,并且它们是正确的类型。 The argparse module可以为您提供帮助。

* unpacks the list *sys.argv[1:5]中的sys.argv[1:5],并将列表中的项目作为参数传递给函数currencyManager