skywind3000/PyStand

运行报错太长时的显示问题

Sadwy opened this issue · 5 comments

Sadwy commented

我在cmd中运行PyStand.exe, 运行中的报错在显示在弹窗里. 因为报错太长, 而且error弹窗不支持滚动或调整窗口大小, 导致我无法看到完整的error信息.
bug while error is too long

这与stand本身无关。
stand使用的前提就是你的代码运行无错。

正确的处理方法是将你的代码debug没啥问题后在使用。


如果懒得那样做,那把exe拖到cmd中运行,这样msgbox里的错误信息也会在cmd中显示出来。

PS:明明readme中比较明确的说明该调试方式。

Sadwy commented

这与stand本身无关。

stand使用的前提就是你的代码运行无错。
正确的处理方法是将你的代码debug没啥问题后在使用。

如果懒得那样做,那把exe拖到cmd中运行,这样msgbox里的错误信息也会在cmd中显示出来。

PS:明明readme中比较明确的说明该调试方式。

  1. 我是将exe拖到cmd里运行的, 但是仅仅在弹窗中出现报错, cmd里没有显示报错信息.
  2. 代码在本机上已跑通, 但是放到其他电脑上报错. 我需要这个报错信息来找到原因.

启动代码里有这一段:

PyStand/PyStand.cpp

Lines 358 to 365 in c8a9cd8

"try:\n"
" code = compile(text, PYSTAND_SCRIPT, 'exec')\n"
" exec(code, environ)\n"
"except:\n"
" import traceback, io\n"
" sio = io.StringIO()\n"
" traceback.print_exc(file = sio)\n"
" os.MessageBox(sio.getvalue(), 'Error')\n"

意味着,GUI 模式下任何未经处理的异常都会由 MessageBox 显示,以前从命令行查看出错信息的方法失效了。

要想绕过这段代码,可以在自己的启动脚本里添加:

try:
    main()
except Exception:
    with open('PyStand.log', 'w', encoding='utf-8') as fp:
        import traceback
        traceback.print_exc(file=fp)
Sadwy commented

启动代码里有这一段:

PyStand/PyStand.cpp

Lines 358 to 365 in c8a9cd8

"try:\n"
" code = compile(text, PYSTAND_SCRIPT, 'exec')\n"
" exec(code, environ)\n"
"except:\n"
" import traceback, io\n"
" sio = io.StringIO()\n"
" traceback.print_exc(file = sio)\n"
" os.MessageBox(sio.getvalue(), 'Error')\n"

意味着,GUI 模式下任何未经处理的异常都会由 MessageBox 显示,以前从命令行查看出错信息的方法失效了。

要想绕过这段代码,可以在自己的启动脚本里添加:

try:
    main()
except Exception:
    with open('PyStand.log', 'w', encoding='utf-8') as fp:
        import traceback
        traceback.print_exc(file=fp)

感谢. 我在执行你提供的代码时无法生成PyStand.log文件, 最终我使用以下代码解决了我的问题:

try:
    main()
except Exception as e:
    import logging
    logging.basicConfig(filename='PyStand.log', format='%(asctime)s - %(levelname)s - %(message)s')
    logging.error(str(e))

又在 #51 中新增了一次提交,以供讨论。第二次提交主要解决 #52 中提到的问题。

如果重定向成功,优先通过命令行输出错误信息,而非通过 os.MessageBox。