-2

ply を使用し、そのライブラリの lex.lex を使用して、単語/フレーズのリストを解析しようとしています。

以前に単語のリストで lex.lex を使用したことがありますが、for ループを使用してレクサーに入力するだけで問題なく動作しました。

しかし、私は次のエラーが発生し続けます

Traceback (most recent call last):
File "<pyshell#56>", line 2, in <module>
mylexer.input(a)
File "ply\lex.py", line 253, in input
c = s[:1]
TypeError: 'NoneType' object has no attribute '__getitem__'

この機会にlexしようとしているリストは解析されたjsonであり、実際に機能した以前のlexingとの唯一の違いは何ですか?

助けてくれてありがとう。

4

2 に答える 2

0

わかった

おかげで、リストを手作業で読んだ後、jsonキーの1つに値がなく、Noneになっているようです。

于 2013-01-25T14:13:53.647 に答える
0

ply.lexの関連コードは次のとおりです。

def input(self,s):
    # Pull off the first character to see if s looks like a string
    c = s[:1]
    if not isinstance(c,StringTypes):
        raise ValueError("Expected a string")
    self.lexdata = s
    self.lexpos = 0
    self.lexlen = len(s)

あなたの問題はあなたの通話にあるようmylexer.input(a)です。a変数は、単語のリストではなくNoneです。

これは、単語リストの生成方法が原因である場合があります。たとえば、これにより、表示されているのと同じエラーが発生します。

words = 'the quick brown fox'.split()
a = words.sort()                   # Note, this returns None
mylexer.input(a)                   # The lexer won't be happy with None
于 2013-01-25T04:06:10.500 に答える