python3.x shelve除了keyror wheras在dict中的key是tru之外

2024-09-30 20:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python3.x和shelve之间纠结着一个奇怪的问题。 其概念是,利用引理的形态形式来寻找合适的范式,并使用shelve。在

guessexpl是搁置,ntrf是键。 问题是,我有键:'\tk1gMnSc2[^:]*::a k1gMnPc1[^:]*:k:ci k1gMnPc6[^:]*:k:cích'(定义形态形式)和ntrf in guessexpl返回{},但是{}引发了一个异常。在

代码:

print('ntrf in expl',ntrf in guessexpl, 'ntrf in guesser',ntrf in guesser)
if ntrf in guessexpl:
    print('print guessexpl[ntrf]')
    print(guessexpl[ntrf])

在修补shelve后,使用Python unpickler而不是C版本:

^{pr2}$

我得到的错误是:

ntrf in expl True ntrf in guesser True
print guessexpl[ntrf]
Traceback (most recent call last):
  File "/usr/lib/python3.2/shelve.py", line 111, in __getitem__
    value = self.cache[key]
KeyError: '\tk1gMnSc2[^:]*::a k1gMnPc1[^:]*:k:ci k1gMnPc6[^:]*:k:cích'

During handling of the above exception, another exception occurred:

Traceback (most recent cal
  File "./scripts/lntrf2lpn_editing.py", line 363, in <module>
    sys.exit(main(sys.argv))
  File "./scripts/lntrf2lpn_editing.py", line 311, in main
    print(guessexpl[ntrf])
  File "/usr/lib/python3.2/shelve.py", line 114, in __getitem__
    value = Unpickler(f).load()
  File "/usr/lib/python3.2/pickle.py", line 834, in load
    dispatch[key[0]](self)
  File "/usr/lib/python3.2/pickle.py", line 1158, in load_long_binget
    self.append(self.memo[i])
KeyError: -1493160213

可复制样品

>>> a['\tk1gMnSc2[^:]*::a k1gMnPc1[^:]*:k:ci k1gMnPc6[^:]*:k:cích'][0]
{'Soustružník': [((184, (('Azték', 'nM'),)), {'Soustružník'})], 'soustružník': [((2260, (('vlk', ''),)), {'soustružník', 'kovosoustružník'})]}

>>> a['\tk1gMnSc2[^:]*::a k1gMnPc1[^:]*:k:ci k1gMnPc6[^:]*:k:cích'][1]
{'oustružník': [((2260, (('vlk', ''),)), {'soustružník', 'kovosoustružník'}), ((184, (('Azték', 'nM'),)), {'Soustružník'})], 'kolomazník': [((2260, (('vlk', ''),)), {'kolomazník'})], 'Kolomazník': [((184, (('Azték', 'nM'),)), {'Kolomazník'})]}

说明:ntrf有dict列表。列表的重点是引理的长度。Dict由引理的结尾组成:[(范式组的频率,(范式组)),相关引理集]…范式组由范式和注释词组组成。在

老实说,我不知道发生了什么事。输入为utf-8。如果搁置文件被删除,一切正常。但这不是解决办法。在


Tags: inpyciusrlinechshelvefile