Python名字

2024-04-18 03:52:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,它使用3个字符串“us$”、“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)

Tags: tofromrerequesturllibamountcurrencyus
1条回答
网友
1楼 · 发布于 2024-04-18 03:52:15

命令行

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

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

例如,改变

currencyManager(currTo,currFrom,currAmount,currDate)

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

sys.argv中的第一个元素是脚本名。因此sys.argv[1:5]由脚本名后面的4个参数组成(假设在命令行上输入了4个参数)。您可能需要检查在命令行上传递的参数数量是否正确,以及它们的类型是否正确。The ^{} module可以帮你。你知道吗

*sys.argv[1:5]unpacks the listsys.argv[1:5]中的*并将列表中的项作为参数传递给函数currencyManager。你知道吗

相关问题 更多 >