Зависимость между «Сеанс / номер строки не был уникальным в базе данных».ошибка и код Python - PullRequest
0 голосов
/ 16 мая 2018

В течение некоторого времени я получаю следующую ошибку (предупреждение?):

ОШИБКА!Номер сеанса / строки не был уникальным в базе данных.При работе с ноутбуком Jupyter ведение журнала истории переносится в новый сеанс

(<XXXX> - это число, например 9149).Поскольку та же ошибка была сообщена для Spyder ( Предупреждение Spyder: «Номер сеанса / номер строки не уникален в базе данных» ), я предполагаю, что существует некоторая проблема с журналированием ядра IPython.

Вопрос: может ли быть какая-либо связь между выполнением моего кода и ошибкой?

Возможно ли, что ошибка вызвана моим кодом? Я касаюсь IPython API следующим образом:

import IPython 

def beep():
    Python.display.display(IPython.display.Audio(url="http://www.w3schools.com/html/horse.ogg", autoplay=True))

def play_sound(self, etype, value, tb, tb_offset=None):
    self.showtraceback((etype, value, tb), tb_offset=tb_offset)
    beep()

get_ipython().set_custom_exc((Exception,), play_sound)

Я использую функцию beep() в своем коде.Я также работаю с большими данными, что приводит к MemoryError исключениям.

И, что более важно, может ли ошибка повлиять на поведение моего кода (учитывая, что я не пытаюсь получить доступ к журналам)?

[EDIT] Кажется, что проблема отличается от Предупреждение Spyder: «Номер сеанса / номер строки не уникален в базе данных» , поскольку я могу воспроизвести его с помощью Jupyter Notebook, но не с помощью Spyder.

1 Ответ

0 голосов
/ 23 мая 2018

Это только частичный ответ - награда все еще имеет право.

Ошибка зависит от моего кода - по крайней мере, когда есть 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));

В результате было вызвано отказоустойчивое , которое выдалопредупреждение и создал новый сеанс.

Я полагаю, что проблема не влияет на поведение моего кода, однако я упускаю надежный источник для такого заявления.

...