PyCharm输出错误消息穿插在控制台输出中。如何解决这个问题?

时间:2015-01-18 20:15:03

标签: python pycharm

我正在运行PyCharm Community Edition 4.0.4

有没有人知道为什么在控制台输出后错误消息不会显示?

由于

C:\Python27\python.exe "F:/Google Drive/code/python_scripts/leetcode/lc_127_word_ladder.py"
Traceback (most recent call last):
START
  File "F:/Google Drive/code/python_scripts/leetcode/lc_127_word_ladder.py", line 68, in <module>

    print sol.ladderLength('talk', 'tail', set)
Graph:
  File "F:/Google Drive/code/python_scripts/leetcode/lc_127_word_ladder.py", line 54, in ladderLength
hall ['fall']
    for item in graph[node[0]]:
fall ['hall']
KeyError: 'talk'
End Graph:

Visited =  {'talk': 0}


Node =  ['talk', 0]
Queue Before =  deque([])

Process finished with exit code 1

如果您注意到,打印语句(例如STARTGraph:hall ['fall'],最多Queue Before = deque([])都会发生在我的代码的正常运行部分。所有这些之后都应出现错误消息。

3 个答案:

答案 0 :(得分:2)

可能只是标准输出问题。

一种解决方法是在打印语句后使用sys.flush.stdout()。

import sys

do_something()
print("Your print statement")
sys.stdout.flush()

答案 1 :(得分:2)

这是由于PyCharm混合了stdout和stderr中的打印语句而引起的。如果将以下行添加到idea.properties文件中,则可以解决此问题:

output.reader.blocking.mode=true

通过帮助|转到idea.properties |编辑自定义属性。

答案 2 :(得分:0)

我是pycharm的新手,所以不确定是否有一个干净的方法来做到这一点。但作为一种解决方法,您可以使用在打印后快速睡眠的自定义打印功能替换打印功能,然后在输出后显示回溯。

import time
print = (lambda p: lambda *args,**kwargs: [p(*args,**kwargs), time.sleep(.01)])(print)



'''
# the above is just a one liner equivalent to this decorator
def add_sleep(p):
    def new_p(*args, **kwargs):
        p(*args,**kwargs)
        time.sleep(.01)
    return new_p
print = add_sleep(print)
'''