2016-09-16 2 views
2

Ich bin auf der Suche nach einer Möglichkeit, Timeout-Ausnahmen für meinen Reddit-Bot, der PRAW (Python) verwendet, zu behandeln. Es läuft mindestens einmal täglich ab, und es hat eine Variable, die codiert ist, also muss ich die Variable aktualisieren und dann den Bot erneut manuell ausführen. Ich suche nach einer Möglichkeit, diese Ausnahmen automatisch zu behandeln. Ich habe versucht, es zu versuchen: und außer :, aber ich fürchte, dass das Hinzufügen eines Breakpoints nach time.sleep (10) die Schleife vollständig stoppen würde. Ich möchte, dass die Schleife weiterhin ausgeführt wird, unabhängig davon, ob die Zeit abgelaufen ist oder nicht. Es gibt ein Beispiel für den folgenden Code.Behandlung einer Timeout-Ausnahme in Python

def run_bot(): 
    # Arbitrary Bot Code Here 

    # This is at the bottom of the code, and it runs the above arbitrary code every 10 seconds 
while True: 
    try: 
     run_bot() 
     time.sleep(10) 
    except: 
     # Don't know what goes here 

Antwort

1

Es hängt davon ab, was Sie tun möchten, wenn eine Zeitüberschreitung auftritt.

können Sie eine pass nichts tun und mit der Schleife weitermachen.

try: 
    run_bot() 
except: 
    pass 

In Ihrem Fall wäre es besser, es zu schreiben explizit als

try: 
    run_bot() 
except: 
    continue 

Sie können aber auch eine Protokollierung der Ausnahme-Klausel

try: 
    run_bot() 
except e: 
    print 'Loading failed due to Timeout' 
    print e 

Um sicherzustellen, dass die Schleife fügen immer Schlafen Sie können Folgendes tun:

nr_of_comments = 0 

def run_bot(): 
    # do stuff 
    nr_of_comments =+ 1 

while True: 
    sleep(10) 
    try: 
     run_bot() 
    except e: 
     continue 
+0

Ich habe Hinzuzufügen ist, dass eine der Funktionen des Bot das ist, wenn es sich um ein Kommentar für eine Weile nicht erkannt hat, ist 10 Sekunden lang schläft und dann wieder überprüft, so dass es nicht Spamming Reddit nicht halten . Wenn ich das tun würde außer: continue, würde die Schleife immer noch so laufen, als ob sie es versuchen würde: run_bot()? Gibt es irgendeinen Weg, diesen Schlaf dort zu behalten? –

+0

Ich versuche zu verstehen: Der 'run_bot' selbst schläft für 10 Sekunden, wenn nichts neues gefunden wird. Und du schläfst wieder, nachdem 'run_bot' beendet wurde? Also wann genau wird die Ausnahme geworfen? – Alu

+0

Ich glaube, die Ausnahme wird ausgelöst, wenn es versucht, eine Verbindung zu Reddit herzustellen, aber es schlägt fehl. Der Schlaf nach dem run_bot (10) ist der einzige Schlaf –

0

Das Verschieben des Schlafs auf Endlich wird Ihr Problem lösen, denke ich. finally block wird unabhängig davon ausgeführt, ob eine Ausnahme eingetreten ist oder nicht.

def run_bot(): 
    # Arbitrary Bot Code Here 

    # This is at the bottom of the code, and it runs the above arbitrary code every 10 seconds 
while True: 
    try: 
     run_bot() 
    except: 
     from traceback import format_exc 
     print "Exception happened:\n%s" % (format_exc()) 
    finally: 
     time.sleep(10) 
Verwandte Themen