Это только частичный ответ - награда все еще имеет право.
Ошибка зависит от моего кода - по крайней мере, когда есть SyntaxError
.
Я воспроизвел его стри следующие ячейки.
In [31]: print(1)
1
In [31]: print 2
File "<ipython-input-32-9d8034018fb9>", line 1
print 2
^
SyntaxError: Missing parentheses in call to 'print'
In [32]: print(2)
2
ERROR! Session/line number was not unique in database. History logging moved to new session 7
Как вы можете видеть, счетчик строк не был увеличен во второй ячейке (с синтаксическими проблемами).
Вдохновленный комментарием @ zwer, я запросил$HOME/.ipython/profile_default/history.sqlite
база данных:
sqlite> select session, line, source from history where line > 30;
6|31|print(1)
6|32|print 2
7|32|print(2)
Очевидно, что счетчик строк для второй ячейки был увеличен в базе данных, но не в записной книжке.
Таким образом, когда третья ячейка имеетПосле успешного выполнения записная книжка попыталась сохранить свой источник с той же строкой, что нарушило ограничение PRIMARY KEY
:
sqlite> .schema history
CREATE TABLE history
(session integer, line integer, source text, source_raw text,
PRIMARY KEY (session, line));
В результате было вызвано отказоустойчивое , которое выдалопредупреждение и создал новый сеанс.
Я полагаю, что проблема не влияет на поведение моего кода, однако я упускаю надежный источник для такого заявления.