skywind3000 / PyStand

:rocket: Python Standalone Deploy Environment !!
MIT License
641 stars 75 forks source link

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

Closed Sadwy closed 1 year ago

Sadwy commented 1 year ago

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

kingmo888 commented 1 year ago

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

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


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

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

Sadwy commented 1 year ago

这与stand本身无关。

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

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

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

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

启动代码里有这一段:

https://github.com/skywind3000/PyStand/blob/c8a9cd8038840c65d36e78e0c68ed04bcc68f3af/PyStand.cpp#L358-L365

意味着,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 1 year ago

启动代码里有这一段:

https://github.com/skywind3000/PyStand/blob/c8a9cd8038840c65d36e78e0c68ed04bcc68f3af/PyStand.cpp#L358-L365

意味着,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))
myd7349 commented 1 year ago

又在 #51 中新增了一次提交,以供讨论。第二次提交主要解决 https://github.com/skywind3000/PyStand/issues/52 中提到的问题。

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