FuzzyWuzzy 仅在烧瓶应用程序中抛出 TypeError

FuzzyWuzzy throws TypeError only in flask app

所以我正在构建一个部署在 heroku 上的基于 flask 的小型搜索工具,以检查可以在哪些排名中找到大学。为此,我使用 fuzzywuzzy 来浏览列表列表并返回相关排名。

@app.route('/results', methods=["POST"])
def results():
    uniname = request.form["Name"]

    with open("QS-2018-ASIA-clean.csv", encoding="ISO-8859-1") as f:
        reader = csv.reader(f)
        rankdata = [r for r in reader]

    with open("THE_Ranking_Asia.csv", encoding="ISO-8859-1") as g:
        reader1 = csv.reader(g)
        rankdata1 = [r for r in reader1]

    hit = process.extractOne(str(uniname), rankdata, scorer=fuzz.token_set_ratio)
    hit1 = process.extractOne(str(uniname), rankdata1, scorer=fuzz.token_set_ratio)

return render_template('results.html', result1=str(hit[0]), result=str(hit[0][0]))

这引发了一个错误,在我的 heroku 应用程序日志中看起来像这样:

 -File "/app/.heroku/python/lib/python3.6/site- packages/fuzzywuzzy/string_processing.py",
 line 19, in replace_non_letters_non_numbers_with_whitespace
 -return regex.sub(" ",a_string) 
 -TypeError: expected string or bytes-like object

这可能是因为 process.extractOne 命中是一个列表?但是当我在 PyCharm 中尝试这个方法时,问题没有出现。在那里他很好地打印出我正在寻找的东西(在这种情况下使用 uniname = "Tokyo"):

print(hit) # (['14', 'THE UNIVERSITY OF TOKYO '], 100)
print(hit[0]) # ['14', 'THE UNIVERSITY OF TOKYO ']
print(hit[0][0]) # 14

有人知道为什么他在 heroku flask 应用程序中抛出错误,但在 PyCharm 中却没有吗?

根据评论,我尝试在本地和 heroku 中检查 fuzzywuzzy 版本。在 heroku 的 python 控制台中执行此操作会引发以下错误:

非常感谢!

问题确实是本地和 heroku 之间 fuzzywuzzy 的版本差异(归功于@AlexHall)。 我没有在 Heroku 的 python 控制台中检查、安装或升级——这没有用——我检查了 Requirements.txt 文件并发现其中提到的版本是:

fuzzywuzzy==0.3.0

已更改为最新的

fuzzywuzzy==0.17.0

和运行

git add .
git commit -m "req update"
git push heroku master

再来一次。现在可以使用了!