#这是我的类:
class CryptoClass:
def __init__(self, cfrom, cto):
self.cfrom = cfrom
self.cto = cto
def priceConverter(self):
dic = cryptocompare.get_price([self.cfrom],[self.cto])
return [self.cfrom,self.cto,dic[self.cfrom][self.cto]]
#以下是功能:
def converter():
A = str(request.form.get("FROM"))
B = str(request.form.get("TO"))
if A!="" and B!="":
price1 = CryptoClass(A,B)
a = price1.priceConverter()
return render_template("converter.html", fromResult = a[0],toResult = a[2],toResultName = a[1])
#最后,这里是我得到的错误:
return [self.cfrom,self.cto,dic[self.cfrom][self.cto]]
TypeError: 'NoneType' object is not subscriptable
我对我的问题感到奇怪的是,有时它有效,有时无效,但我找不到它背后的逻辑,任何帮助都将不胜感激:(
p.S:如果我用A代替A和B="A";BTC";并且B=";ETH";,它的工作原理很有魅力,我确保请求确实有效,并尝试使用表单中的值打印a和B,但当我把所有代码放在一起时,我甚至无法访问表单页面,因为我会弹出这个错误。
您的问题可能是由两件事引起的:
- 无效值(
FROM
和TO
( cryptocompare.get_price
响应
让我们从 只提供了一个值有效加密货币让我们来处理最后两个,因为第一个已经包含在源代码中了。 未提供的值:在调用 无效的加密货币:在这一点上,我做了一些假设(基于对min-API.cryptocompare.com的Web API调用和源代码。当您使用无效参数调用 考虑到这一点, 建议在返回语句之前检查 请注意,如果 祝你好运!1
开始。在您的请求处理中,有三种可能的情况,两个值都被提供了,并且都是有效的加密货币(比如FROM=ETH
和TO=BTC
(,request.form.get()
时,请确保建议一个默认值,或者注意,如果请求的值不存在,此函数将返回None(不是空字符串(。此外,这样改进你的代码会很好:A = request.form.get("FROM", "")
B = request.form.get("TO", "")
cryptocompare.get_price
时,比如cryptocompare.get_price(['BTC'], ['AAAAAAAAA'])
,它会返回None对象。dic
的值将是None
,当您尝试运行此dic[self.cfrom][self.cto]
时,您将尝试为None
对象添加下标。因此,错误为:TypeError: 'NoneType' object is not subscriptable
。dic
对象:dic = cryptocompare.get_price([self.cfrom],[self.cto])
if dic:
return [self.cfrom,self.cto,dic[self.cfrom][self.cto]]
return [self.cfrom,self.cto,None]
dic
是None
,那么return语句中列表的最后一部分也是None
,并且需要在接收此响应的代码部分中进行相应处理。