【问题标题】:Simple string concatenation fails简单的字符串连接失败
【发布时间】:2015-06-02 13:45:32
【问题描述】:

我有以下代码:

from yahoo_finance import Currency

symbolslist  = ["EURUSD","EURGBP","EURJPY","EURRUB","USDCAD","USDCHF","AUSUSD"]

for i in range(len(symbolslist)):
        symbol = symbolslist[i]
        nomisma = Currency(symbol).get_rate()

        quota = symbol + " = " + nomisma
        print quota

我得到了结果:

EURUSD = 1.0891
EURGBP = 0.7322
EURJPY = 129.7440
EURRUB = 63.0560
USDCAD = 1.2614
USDCHF = 0.9622
Traceback (most recent call last):
  File "yahoopy.py", line 13, in <module>
    quota = symbol + " = " + nomisma
TypeError: cannot concatenate 'str' and 'NoneType' objects

我知道这个错误已经在this 链接中讨论过。

但我希望我可以在不求助于 mysql 的情况下克服这个错误。

【问题讨论】:

  • 怎么可能?该程序通过 yahoo_finance API 直接从 Yahoo Finance 网站获取数据。奇怪的是,它以 AUDUSD 的最后一个价值崩溃。
  • 只是一个 OT 建议:您可以使用“for symbol in symbols”通过数组元素循环遍历数组

标签: python python-2.7 string-concatenation yahoo-finance nonetype


【解决方案1】:

问题是一个错字。你写的不是AUDUSD,而是AUSUSD。修复它,错误就会消失:

symbolslist  = ["EURUSD","EURGBP","EURJPY","EURRUB","USDCAD","USDCHF","AUDUSD"]

按照@BhargavRao 的建议,使用format 来捕获此类错误仍然是一个好主意。

【讨论】:

    【解决方案2】:

    在您的 concat 语句上方添加 if 子句

    if nomisma:
        quota = symbol + " = " + nomisma
    

    假设 - 这意味着您的数据库中不存在 AUSUSD,这就是 Currency(symbol).get_rate() 返回 None 的原因。还提到here 它是AUDUSD 而不是AUSUSD

    注意:最好使用format 来连接

    quota = "{} = {}".format(symbol,nomisma)
    

    【讨论】:

    • 谢谢,我会试试的。
    • 你是对的。是我愚蠢的错字把事情搞砸了。它现在工作得很好。感谢您注意到它。我以为我之前已经纠正过了……
    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2012-12-19
    • 2019-04-02
    相关资源
    最近更新 更多