[PYTHON] Gute Ausnahmebehandlung aus dem automatischen Überwachungsprogramm für virtuelle Währungen

Ich habe das Gefühl, ein wenig über die Ausnahmebehandlung zu verstehen, was ein Rätsel war, als ich Java lernte. Wenn es einen Lernenden gibt, der sagt: "Das Verdienen der Behandlung von Ausnahmen ist ein Rätsel", hoffe ich, dass es als Beispiel für die Verwendung der Ausnahmebehandlung nützlich sein wird.

Automatische Überwachung der virtuellen Wechselkurse

Während der Erstellung dieses Programms habe ich etwas über die Ausnahmebehandlung gelernt. Sprache: Python3 Zusammenfassung: Überwachen Sie automatisch den virtuellen Wechselkurs von Zaif. Bibliothek: GitHub --techbureau / zaifapi (Danke)

Was ich getan habe, ist dasselbe wie auf der offiziellen Website von Zaif. Stellen Sie einfach über die API eine Verbindung zu Zaif her und geben Sie die Währungsinformationen ein.

# -*- coding: utf-8 -*-
from zaifapi import ZaifPublicApi

zaif = ZaifPublicApi()
#10 mal wiederholen
for i in range(10):
	while (1):
		err = False
		
		try:
			askBJ = zaif.depth('btc_jpy')['asks'][0][0]
			askMJ = zaif.depth('mona_jpy')['asks'][0][0]
			askMB = zaif.depth('mona_btc')['asks'][0][0]
			bidBJ = zaif.depth('btc_jpy')['bids'][0][0]
			bidMJ = zaif.depth('mona_jpy')['bids'][0][0]
			bidMB = zaif.depth('mona_btc')['bids'][0][0]
		
		except:
			err = True
			print('except')
		
		if (err == False):
			break
	
	print(askBJ, end=', ')
	print(askMJ, end=', ')
	print(askMB, end=', ')
	print(bidBJ, end=', ')
	print(bidMJ, end=', ')
	print(bidMB)

Wenn während der Verarbeitung im Versuch des obigen Programms ein Verbindungsfehler auftritt, wird das Auftreten der Ausnahme erkannt und die Verarbeitung in Ausnahme ausgeführt, und der Versuch wird wiederholt, ohne die Schleife zu verlassen. Mit anderen Worten, "Wenn Sie einen Verbindungsfehler machen, stellen Sie erneut eine Verbindung her" wird wiederholt, bis die Verbindung erfolgreich ist.

Aus meiner Sicht sind diese drei Punkte die guten Punkte für die Ausnahmebehandlung.

  1. Fällt nicht, auch wenn eine Ausnahme auftritt
  2. Die Ursache des Fehlers ist leicht zu verstehen
  3. Sie können die Fehler zusammenfassen

1. Fällt nicht, auch wenn eine Ausnahme auftritt

Es ist eine voreingenommene Ansicht, aber wenn Sie den Teil einschließen, in dem die Ausnahme beim Versuch auftritt, wird sie nicht fallen, selbst wenn Sie mit Ausnahme bestehen (nichts tun). Ignorierte Ausnahmen verbreiten sich und verursachen einen Fehler an einer anderen Stelle ... Es wird irgendwann fallen, aber mit dem obigen Programm wird nur ein Verbindungsfehler auftreten, so dass es anhält.

Ich wusste das in der Vergangenheit nicht, also dachte ich wirklich, die Ausnahme sei "ein mysteriöser Teufel, der unerbittlich versucht, das Programm fallen zu lassen".

[Nachtrag 2018/2/5] Es scheint, dass es eine ähnliche Person gab

Ist der Subunternehmer von SIer nicht zu niedrig? Verstehe nicht, was das Framework oder die Bibliothek tut ~ Ausgelassen ~ Diese Leute verstehen normalerweise überhaupt keine "Ausnahmen". Ich weiß nicht, wofür es ist, und ich habe nur die Erkenntnis, dass es meine Codierungsarbeit stört.

try {
...
}catch(Exception e) {
  return false;
}

Sie können diese Art von Code schreiben, um die Fehlerinformationen zu komprimieren.

Dies ist sicherlich bei meinem Beispiel der Fall, und ich kann nicht anders, als die Gegenmaßnahmen darin zu bestehen, "es abwesend zu machen".

Um eine Entschuldigung zu finden, in meinem Fall ist es in Ordnung, wenn ich mich wieder verbinde, also denke ich, dass es immer noch besser ist.

Kurz gesagt, außer durch in dem Sinne, dass "Ich möchte, dass Sie sich still wieder verbinden, aber nicht einzeln herunterfallen."

Wenn Sie den Ausnahmeinhalt nicht übernehmen, können Sie natürlich keine Ausnahmen wie "Tatsächlich ist der API-Schlüssel anders" oder "Es gibt kein solches Währungspaar" finden, sodass er auf lange Sicht nicht verfügbar ist.

2. Die Ursache des Fehlers ist leicht zu verstehen

Schreiben einer für Bediener problematischen Ausnahmebehandlung Wenn im System ein Fehler auftritt, überprüft der Bediener die Protokollausgabe des Programms und identifiziert die Ursache. Die Ausnahmebehandlung ist zu diesem Zeitpunkt wichtig. _ Mit der richtigen Ausnahmebehandlung ist es einfacher, die Ursache zu identifizieren. _

Sogar in diesem Programm hatte ich den Fehler Ausnahme: Der Rückgabestatuscode ist eine Weile 504, bevor er abgeschlossen wurde. Zu diesem Zeitpunkt wurde mir tatsächlich gesagt, dass das Problem ein 504-Fehler war, und so kam ich schließlich zu "Wenn Sie nicht aufhören zu versuchen, eine Verbindung herzustellen, bis es vorbei ist".

Wenn dies keine Ausnahme ist und "Variablentyp ist anders" angezeigt wird _ Warum unterscheidet sich der Typ? Debug → Warum gibt es kein Problem orz → Wenn Sie ihn für eine Weile drehen, tritt manchmal der gleiche Fehler auf → Die empfangenen Daten sind im Kommunikationsteil nicht in Ordnung, ist dies der Typ anders? _

Ich habe endlich die Ursache verstanden und weiter _ Warum gibt es Zeiten, in denen es normal ist und Zeiten, in denen es verrückt ist? → Es scheint regelmäßig zu passieren → Ihre Seite? Die andere Partei? → Ist der Server der anderen Partei außer Betrieb? _

Ich habe das Gefühl, dass ich hier zum ersten Mal den 504-Fehler bemerke (das Beispiel ist möglicherweise schlecht).

Die Ausnahme ist, dass es einen solchen Prozess überspringt und Ihnen sofort sagt "Ich habe einen 504-Fehler".

3. Sie können die Fehler zusammenfassen

Wenn Sie die Ausnahmebehandlung verwenden, können Sie "dasselbe Problem im Stammverzeichnis" unabhängig von den Details als dieselbe Ausnahme behandeln. Selbst wenn Sie versuchen, den str-Typ an den int-Typ zu übergeben oder umgekehrt, ist das Problem, dass die Variablentypen unterschiedlich sind, dasselbe. Selbst wenn Sie keine zwei if-Anweisungen schreiben, werden sie ausnahmsweise in TypeError zusammengefasst (das Beispiel ist möglicherweise schlecht). Unbekannt).

Wenn Sie dies erweitern, können Sie einen Push wie "Wenn ein Problem auftritt, tritt eine Ausnahme auf. Wenn eine Ausnahme auftritt, ist die gesamte Ausnahmeverarbeitung abgeschlossen!"

In der diesmal verwendeten Bibliothek gibt es einen Abschnitt, der dies absichtlich als Ausnahme behandelt, wenn ein seltsamer Wert erkannt wird (ich denke, dass der 504-Fehler der Fall ist). Es sieht ein wenig gut aus, weil es wie ein effizienter Mechanismus aussieht, bei dem sich der Benutzer nicht um die Details kümmern muss.

Recommended Posts

Gute Ausnahmebehandlung aus dem automatischen Überwachungsprogramm für virtuelle Währungen
[Hikari-Python] Kapitel 07-02 Ausnahmebehandlung (Kontinuierliche Ausführung des Programms durch Ausnahmebehandlung)
Betrieb des automatischen Handelsskripts für virtuelle Währungen
Tensorflows Denkweise lernte aus der Kartoffelherstellung
Fehlerbehandlung nach dem Stoppen des Downloads der gelernten Daten von VGG16
Berechnen des aus ABC134-D gelernten Rechenaufwands