0
これは奇妙に見えます。 クラスという名前の変数が出力されますが、filter(...)
の命令を実行しようとすると、未定義です。ここでPDB:変数は印刷できますが、定義されていません
はコードです:
def start(self, tag, attrib):
classes = attrib[self._CLASS_ATTR] if self._CLASS_ATTR in attrib else None
if tag == self._TAG_P:
p = self._doc.add_paragraph('')
self._cur_p = p
if classes is not None:
alignments = [self._left_align, self._center_align, self._right_align]
import pdb; pdb.set_trace()
alignments = filter(lambda x: partial(x.is_in, classes), alignments)
if len(alignments) > 0:
p.alignment = alignments[0].get()
assert len(alignments) < 2
PDBがそれの休憩時間に停止します。 filter(...)
命令が正常に実行できなかったのはなぜ
(Pdb) print classes
center title
(Pdb) classes
u'center title'
:
(Pdb) print filter(lambda x: partial(x.is_in, classes), alignments)
*** NameError: global name 'classes' is not defined
しかし:私はfilter()
を実行しようとすると?
の短いコードでそれを再現してみましょう:
from functools import partial
def f():
classes = 'my_classes'
def my_bool(obj, _):
return True
if classes is not None:
import pdb; pdb.set_trace() # point a
alignments = filter(lambda x: my_bool(x, classes), ['1', '2', '3'])
import pdb; pdb.set_trace() # point b
pass
f()
...
(Pdb) filter(lambda x: my_bool(x, classes), ['1', '2', '3'])
*** NameError: global name 'my_bool' is not defined
ただし、コマンドc
は、例外が発生しない箇所a
でのPDB(継続)。
実際のコードでタイプミスがあり、この質問を投稿したときに気付かずにタイプミスが修正されたようです。 – user2357112
( 'filter'は意味がありません。あなたの述語はブール値の代わりに' partial'オブジェクトを返します。) – user2357112
@ user2357112こんにちは。それが私のコードの今のところです。 – sergzach