Как отладить wxpython приложения?

Если вы хотите сохранить простоту без формул VBA или массива, я бы создал дополнительный столбец, который объединяет «start» и «stop», а затем использовал vlookup для поиска правильных строк:

Добавьте эту формулу для обеих таблиц в дополнительном столбце (A легче всего искать), допустим, что start и stop находятся в E и F

=E1&"-"&F1". Убедитесь, что что-то между значениями установлено, чтобы избежать дублирования.

И используйте VLOOKUP для добавления столбцов C и D к A и B путем поиска вновь созданного значения start-stop.

18
задан rogeriopvl 1 May 2009 в 20:26
поделиться

6 ответов

не уверен насчет версии для mac, но в wxPython есть встроенный способ перенаправления ошибок в окно (которое, к сожалению, закроется при сбое приложения, но полезно для перехвата ошибок, которые молча терпят неудачу) или в файл журнала (обновляется только после закрытия приложения):

app = wx.App(redirect=True) 
app = wx.App(redirect=True,filename="mylogfile.txt")

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

.
13
ответ дан 30 November 2019 в 08:38
поделиться

Запуск из Python IDE с помощью отладчика.

Запуск в WingIDE сразу обнаруживает две проблемы:

  • ID_ABOUT должно быть wx.ID_ABOUT (строка № 4 из __ init __ ).
  • OnAboutBox (весь метод) слишком сильно отступает на один шаг. Как написано, это локальная функция внутри __ init __ . Переместите весь метод на один шаг влево, чтобы сделать его методом MyApp .
2
ответ дан 30 November 2019 в 08:38
поделиться

Вот способ сообщить об ошибке в графическом интерфейсе вместо консоли через MessageDialog. Вы можете использовать метод show_error () везде, где перехватывается исключение, здесь я просто перехватываю его на самом верхнем уровне. Вы можете изменить его так, чтобы приложение продолжало работать после возникновения ошибки, если ошибка может быть обработана.

import wx
import sys
import traceback

def show_error():
    message = ''.join(traceback.format_exception(*sys.exc_info()))
    dialog = wx.MessageDialog(None, message, 'Error!', wx.OK|wx.ICON_ERROR)
    dialog.ShowModal()

class Frame(wx.Frame):
    def __init__(self):
        super(Frame, self).__init__(None, -1, 'My Frame')
    def cause_error(self):
        raise Exception, 'This is a test.'

def main():
    app = wx.PySimpleApp()
    try:
        frame = Frame()
        frame.Show()
        frame.cause_error()
        app.MainLoop()
    except:
        show_error()

if __name__ == '__main__':
    main()
8
ответ дан 30 November 2019 в 08:38
поделиться

Запустите приложение из командной строки (я думаю, что оно называется «Терминал» в OS X), как указано ниже, вместо двойного щелчка по файлу python. Таким образом, при сбое приложения вы увидите трассировку стека.

python NameOfScript.py

Кроме того, вы можете перенаправить вывод в файл журнала:

f=open('app.log','w')
import sys
sys.stdout=f
sys.stderr=f
1
ответ дан 30 November 2019 в 08:38
поделиться

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

0
ответ дан 30 November 2019 в 08:38
поделиться

Вы также можете запустить свой проект из Python IDE, например Eric IDE . Вы получаете дополнительный бонус за возможность отслеживать, просматривать переменные и множество других интересных вещей! : -)

0
ответ дан 30 November 2019 в 08:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: