2017-01-22 4 views
0

Dies ist mein Code:Traceback Akkumulation erst nach Keyboardinterrutps

import autopy 
import time 
import math 
width, height = 400, 400 
a, b = 200, 200 
r = 150 
def drawCicle(): 
    for x in range(0, 3): 
     for angle in range(0, 360, 1): 
      x = r * math.sin(math.radians(angle)) + a 
      y = r * math.cos(math.radians(angle)) + b 
      autopy.mouse.move(int(x),int(y)) 
      time.sleep(0.002) 
def mouseMove(): 
    counter = 0 
    while counter < 4: 
     drawCicle() 
     counter += 1 
    else: 
     print('Drawing ' + str(counter) + ' circles') 
     print('moving once more in 10 seconds...') 
     counter = 0 
     time.sleep(10) 
     mouseMove() 

if __name__ == "__main__": 
    mouseMove() 

Das Merkwürdige ist, dass der Code einfach gut läuft. Ich bekomme nur Tracebacks nach meiner Schleife mit einem KeyboardInterrupt brechen, aus jeder Schleife akkumulierte Rückverfolgungen aus verschütten, die wie folgt lautete:

Traceback (most recent call last): 
    File "test.py", line 27, in <module> 
    mouseMove() 
    File "test.py", line 24, in mouseMove 
    mouseMove() 
    File "test.py", line 24, in mouseMove 
    mouseMove() 
    File "test.py", line 24, in mouseMove 
    mouseMove() 
    File "test.py", line 23, in mouseMove 
    time.sleep(10) 
KeyboardInterrupt 

Diese speziell geschieht nur, wenn ich den Code manuell zu brechen, kann jemand etwas Licht wie vergießen, was Best Practice ignoriere ich?

+0

Verwenden Sie einfach 'print' mit' flush = True', um die Druckanweisungen sofort anzuzeigen. – 2ps

Antwort

0

Wenn Sie die Ausgabe Ihrer Druckanweisungen sofort sehen möchten, verwenden Sie einfach flush=True.

, ob die Ausgabe zwischengespeichert wird üblicherweise durch Datei bestimmt wird, aber wenn das flush Schlüsselwort Argument wahr ist, ist der Strom zwangsgespült.


def mouseMove(): 
    counter = 0 
    while counter < 4: 
     drawCicle() 
     counter += 1 
    else: 
     print('Drawing ' + str(counter) + ' circles', flush=True) 
     print('moving once more in 10 seconds...', flush=True) 
     counter = 0 
     time.sleep(10) 
     mouseMove() 

Exception Tracebacks wird nur gedruckt, wenn Sie Ihr Programm mit einer Ausnahme verlassen.

+0

Hmm Ich bekomme ein ungültiges Syntax-Flag mit diesem 'print ('bewegt sich noch einmal in 10 Sekunden ...', flush = True)' Muss ich das in python3 tun? –

+0

edit: Ich setze 'flush = True ', aber ich bekomme immer noch das gleiche Problem. –