Ipython выдает неправильную трассировку при ошибке в файле .pyPython

Программы на Python
Ответить
Anonymous
 Ipython выдает неправильную трассировку при ошибке в файле .py

Сообщение Anonymous »

Python 3.12.2,
IPython 9.7.0,
linux debian.
Когда в файле .py обнаруживается ошибка, обратная трассировка в ipython не показывает правильный фрагмент кода, что очень затрудняет отладку. Это зависит от прошлых действий: трассировка работает нормально, пока файл не будет изменен (похоже, пока не изменится количество строк, см. ниже), затем перестанет находить правильное размещение или ошибку в файле, с сообщением
Обратите внимание, что в моем ipython_config.py у меня есть:

Код: Выделить всё

c.InteractiveShellApp.extensions = ['autoreload']
c.InteractiveShellApp.exec_lines = ['%autoreload 2']
Вот способ воспроизвести проблему в моей системе:
У меня есть файл my.py с ошибкой:

Код: Выделить всё

class A():
def a(self):
print('a')
AAA
В терминале я запускаю ipython, и ошибка получается нормально:

Код: Выделить всё

In [1]: import my
In [2]: p = my.A()
In [3]: p.a()
a
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[3], line 1
----> 1 p.a()

File ~/my.py:4, in A.a(self)
2 def a(self):
3     print('a')
----> 4     AAA

NameError: name 'AAA' is not defined
Теперь я меняю файл на строку BBB:

Код: Выделить всё

class A():
def a(self):
print('a')
BBB
и снова ошибка найдена ок:

Код: Выделить всё

File ~/my.py:4, in A.a(self)
2 def a(self):
3     print('a')
----> 4     BBB
NameError: name 'BBB' is not defined
Теперь странное поведение, я изменяю файл, добавляя строку и новую ошибку:

Код: Выделить всё

class A():
def a(self):
print('a')

CCC
и здесь ipython выдает неправильную трассировку:

Код: Выделить всё

In [5]: p.a()
a
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[5], line 1
----> 1 p.a()

File ~/my.py:4, in A.a(self)
0 

NameError: name 'CCC' is not defined
Итак, хотя ошибка () найден, фрагмент кода исчезает, и я понятия не имею, где была найдена ошибка.
У вас есть идеи, как это исправить?
(ИИ предложил добавить в ipython_config.py строки c.InteractiveShell.cache_size = 0 или c.InteractiveShell.ast_node_interactivity = 'last_expr_or_assign', но это не решает проблему)

Подробнее здесь: https://stackoverflow.com/questions/798 ... -a-py-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»