此问题涉及previously asked question。
我一直在使用Investopedia API,它使用Beautiful Soup与Investopedia交易模拟器进行互动。我最初的问题是AttributeError
的报告,但该报告似乎不再重要(如果您希望了解原始问题的详细信息,请参阅下文)。
在提出建议后,我安装了Python 3.6,因为我以前使用的是2.7,并再次运行我的测试。那个时候,操作正常。但是,我不知道原因。为什么,如果API构建为与p2.7和p3.6一起运行,那么函数在3.6中工作?它与Beautiful Soup集成有什么关系吗?或者input
vs raw_input
?
涉及的第一部分是这个Python块,它接受一个输入并根据给定的输入执行一个函数(action是raw_input
):
if action == 'trade':
symbol = raw_input("Symbol: ")
order_type = raw_input("Order Type: ")
quantity = raw_input("Quantity: ")
if order_type == 'buy':
client.trade(str(symbol), ita.Action.buy, int(quantity))
elif order_type == 'sell':
client.trade(str(symbol), ita.Action.sell, int(quantity))
elif order_type == 'short':
client.trade(str(symbol), ita.Action.short, int(quantity))
第二个参数(ita.Action.[order_type]
),按照API文档中的指示编写,并且如代码本身所示,引用此块:
# input transaction type
[option.attrs.pop("selected", "") for option in trade_form.select("select#transactionTypeDropDown")[0]("option")]
trade_form.select("select#transactionTypeDropDown")[0].find("option", {"value": str(orderType.value)})["selected"] = True
该块使用Beautiful Soup中的.find
来定位一个格式如下的下拉菜单:
<select name="transactionTypeDropDown" id="transactionTypeDropDown" style="width: auto;">
<option value="1">Buy</option>
<option value="2">Sell</option>
<option value="3">Sell Short</option>
<option value="4">Buy to Cover</option>
</select>
在API的文档中,列出的示例操作如下:
client.trade("GOOG", ita.Action.buy, 10)
但是,AttributeError
报告的是'int' object has no attribute 'value'
,在该给定的行中,即使我试图运行该行,因为它自己在文档中写入。
File "/fakepath/MMIAS/ita/ita.py", line 233, in trade
trade_form.select("select#transactionTypeDropDown")[0].find("option", {"value": str(orderType.value)})["selected"] = True
AttributeError: 'int' object has no attribute 'value'
我假设有问题的'int'
对象是下拉菜单中的option
值,有了这个,我假设int
,也许是1 - 4,占用orderType
参数。那么,为什么会建议参数为ita.Action.[buy/sell/short/etc]
,而不仅仅是一个整数值?如果整数值满足该参数,为什么它会返回相同的错误?