我有一個非常簡單的 Python 程式。
def square(a):
for i in a:
yield i*i
def main():
a = [1, 2, 3]
b = square(a)
print(b)
print(next(b))
print(next(b))
print(next(b))
print(next(b))
if __name__ == "__main__":
main()
當我從命令列運行它時,我得到了以下結果,這是我所期望的。
c:\test1>python main.py
<generator object square at 0x000002982E07A4A0>
1
4
9
Traceback (most recent call last):
File "main.py", line 16, in <module>
main()
File "main.py", line 12, in main
print(next(b))
StopIteration
c:\test1>
我運行了很多次,結果總是一樣的。但是,當我使用帶有 Python 插件的 IntelliJ IDEA 來運行相同的程式時,我得到了這個:
C:\Python\python.exe c:/test1/main.py
Traceback (most recent call last):
File "c:/my_projects/python1/main.py", line 16, in <module>
main()
File "c:/my_projects/python1/main.py", line 12, in main
print(next(b))
StopIteration
<generator object square at 0x000001799923C580>
1
4
9
Process finished with exit code 1
或這個:
C:\Python\python.exe c:/test1/main.py
<generator object square at 0x00000230F551C580>
1
4
9
Traceback (most recent call last):
File "c:/my_projects/python1/main.py", line 16, in <module>
main()
File "c:/my_projects/python1/main.py", line 12, in main
print(next(b))
StopIteration
Process finished with exit code 1
為什么會這樣?如何在 IntelliJ IDEA 中獲得穩定的結果?
uj5u.com熱心網友回復:
坎普的解釋是正確的。
PyCharm 問題跟蹤器中有相應的票證https://youtrack.jetbrains.com/issue/PY-37396
另請參閱https://youtrack.jetbrains.com/issue/PY-32776
作為一種可能的解決方法,您可以在輸出控制臺選項中為您的運行配置啟用模擬終端(運行|編輯配置...)。
uj5u.com熱心網友回復:
這里的問題是print輸出轉到stdout而例外訊息轉到stderr. 在您的終端中,它們按原樣獲得輸出,但stdout出于效率原因,IDE 可能會進行一些緩沖。相同的緩沖區將不適用,stderr因為它需要確保輸出盡快出現在螢屏上,并且不會冒緩沖區被過早清除的風險。這意味著有時(根據我的經驗,經常出現)像您這樣的例外訊息會出現在您希望已經顯示的正常輸出之前。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456230.html
標籤:Python 智能理念 ide jetbrains-ide
上一篇:檢查點擊事件是否存在元素
