0

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の呼び出し例では、関数がリストを返すため、この動作は正常であると想定できます。

4

1 に答える 1

2

関数は(見た目は)辞書を返しています...

いいえ、それはリスト内の辞書です。角かっこは値の一部です。

>>> [{'foo':'bar'}][0]
{'foo': 'bar'}
于 2012-09-25T20:28:12.527 に答える