Python2.7.332ビットのデジタルI/OにLabjackを使用していますが、次の問題が発生します。
これは私が呼んでいるlabjacku6関数です:
class PortStateRead(FeedbackCommand):
"""
PortStateRead Feedback command
Reads the state of all digital I/O.
>>> d.getFeedback( u6.PortStateRead() )
[ { 'FIO' : 10, 'EIO' : 0, 'CIO' : 0 } ]
"""
def __init__(self):
self.cmdBytes = [ 26 ]
def __repr__(self):
return "<u6.PortStateRead()>"
readLen = 3
def handle(self, input):
return {'FIO' : input[0], 'EIO' : input[1], 'CIO' : input[2] }
関数は(見た目は)辞書を返しますが、変数に戻り値を割り当てると、リストとして割り当てられます。
>>> import u6
>>> handle = u6.U6()
>>> x = handle.getFeedback(u6.PortStateRead())
>>> x
[{'CIO': 15, 'FIO': 255, 'EIO': 255}]
>>> x['FIO']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
x [0]を新しい変数に割り当てると、辞書として割り当てられます
>>> y = x[0]
>>> y['FIO']
255
誰かが私にこの振る舞いを説明してもらえますか?
docstringの呼び出し例では、関数がリストを返すため、この動作は正常であると想定できます。