我该怎么做才能从JetBrains

时间:2018-05-01 12:45:20

标签: python pycharm read-eval-print-loop

我正在尝试编写一个程序来简化经典的饮酒歌曲,Python解释器表现得非常奇怪。

我的代码是:

def lines():
    bottles = 99
    while bottles > 0:
        yield str(bottles) + ' bottles of pop on the wall!'
        yield str(bottles) + ' bottles of pop!'
        yield 'Take one down and pass it around!'
        bottles -= 1
        yield str(bottles) + ' bottles of pop on the wall!'
        yield ''

def sing():
    for line in lines():
        print(line)

这是从Linux命令行按预期运行的;它可能会打印出“1瓶流行音乐”,但它确实能满足我的需求。

然而,从JetBrains中的“Python控制台”,我得到了几个排列:

>>> ninetynine.sing()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Users\chris\PycharmProjects\untitled\ninetynine.py", line 10, in sing
    for line in lines():
TypeError: 'function' object is not iterable

我试着用稍微不同的方式调用它,然后得到了:

>>> for line in ninetynine.lines():
...    print(line)

99 bottles of pop on the wall!
99 bottles of pop!
Take one down and pass it around!
98 bottles of pop on the wall!
>>>

我还没有管理的是让它像一个循环运行的生成器。

我可以或应该做些什么来从PyCharm获得正确的REPL行为?

- UPDATE -

有一些愚蠢的缓存正在进行中。

我重新键入了.py文件,但输入了最后一个yield statemest,

        yield str(bottles + ' bottles of pop on the wall!')

这给出了明显的错误,所以我更改了源文件并保存了:

        yield str(bottles) + ' bottles of pop on the wall!

我从REPL重新导入bottles后报告了完全相同的错误,只有它指向的行是我正确的bottle.py行,现在正确放置了)bottles之后。

所以有一些脏缓存正在进行中;我认为源代码无法重新编译或类似的东西。

是否有“make clean”选项,或者更好的是,如果源文件比编译的表单更新,或者根本不保存字节码,那么将重新编译的设置?

1 个答案:

答案 0 :(得分:2)

您是在控制台中导入文件吗?

ninetynine.py:

{{1}}

pycharm - &gt;工具 - &gt; python控制台...

{{1}}

对我来说很好。