【问题标题】:PyCharm Run --- why does it sometimes display a traceback and error and sometimes not?PyCharm Run --- 为什么有时会显示回溯和错误,有时却不显示?
【发布时间】:2017-10-19 19:21:15
【问题描述】:

我注意到,如果我在 PyCharm 中运行完全相同的 Python 3 代码,“运行”选项卡有时会显示完整的回溯和错误消息,但其他时候只会显示“进程已完成,退出代码 1 ”。

1) 有人可以解释为什么会这样吗?

2) 有什么方法可以强制 PyCharm 始终显示完整的回溯和错误消息?

编辑:这是一个显示我所看到的行为的示例。当我运行 20 次时,我得到了两次回溯和错误,以及 18 次“退出代码 1”消息。为了看到这种行为,代码似乎需要在引发异常之前忙于打印一些东西。如果我只引发异常(没有调用 callme()),我总是会得到回溯和错误。

#!/usr/bin/python3

def callme():
    print('doing some stuff!')

def main():
    for i in range(1,100):
        callme()
    raise Exception('Something is went wrong!')

if __name__ == '__main__':
    main()

编辑 2:我刚刚意识到这个问题的答案可能必须是。 PyCharm 运行显示窗口仅显示一定数量的行。如果它可以打印的行数少于我正在打印的内容的数量,那么某些行将不会显示。因此,实际上回溯线仍然存在,但它们只是在其他一些输出之前打印出来,因此它们在窗口中不可见。我发现我实际上可以通过按下“运行”窗口旁边的向上小按钮跳到它们(即使它们不可见)。

编辑 3:看起来我不是唯一遇到此问题的人: PyCharm output error messages interspersed with console output. How to fix this?

根据那个问题,它被报告为一个错误 (https://youtrack.jetbrains.com/issue/PY-16143),但是(据我所知)它没有被修复。关于如何解决这个问题的任何想法?

对于那些问:我正在使用 PyCharm 社区版 2016.3.2 并且我的操作系统是 CentOS 6.6。

【问题讨论】:

  • mcve可以帮忙解答
  • 您需要指定您所使用的操作系统等内容。另外,您是否尝试过直接从命令行运行脚本,而不是使用带有 python3 file.py 的 PyCharm?
  • 感谢@ElRuso,制作 mcve 帮助我弄清楚发生了什么!
  • @Nifled,当我从命令行运行时,这不会发生。输出始终保持正确的顺序,并且在所有程序输出之后打印回溯和错误。
  • 根据另一条评论,我猜你知道出了什么问题。如果是,那是什么?

标签: pycharm


【解决方案1】:

我可以在 Ubuntu 16.04 PyCharm 2017.2.3 上确认此行为
如果您想每次都查看堆栈跟踪,请尝试此代码,无论如何stop using print for debugging :)

import logging

def callme():
    logging.info('doing some stuff!')

def main():
    for i in range(1,100):
        callme()
    raise Exception('Something is went wrong!')

if __name__ == '__main__':
    logging.basicConfig(level='INFO')
    main()

【讨论】:

  • 我测试了这个解决方案,它适用于我的 PyCharm 版本。我什至不知道有一个日志库!这确实看起来比到处打印要好得多。谢谢!