[PYTHON] Fizzbuzz mit Ausnahmebehandlung

Ich habe [einen bestimmten Artikel] gesehen (http://qiita.com/pondzu/items/b2ab4bc09406152621ea) und es schien interessant zu sein, also habe ich es versucht.

Ist der besondere Teil des Ausnahmeübergangs die Fortsetzung der Verarbeitung? Wo Sie das Teil überspringen können

Persönlich ist der besondere Teil des Übergangs in der Ausnahme die Fortsetzung der Verarbeitung? Ich denke, dass es ist, den Teil wegzuwerfen und zu dem Ort zu springen, außer.

Im Einzelnen sieht es wie folgt aus.

try:
    print(object() + 1)
except TypeError:
    print("hai")

# hai

Fortsetzung von object () + 1 bei normaler Verarbeitung? Ich kann den Aufruf von print () nicht überspringen. Eine Ausnahme wird ausgelöst, wenn ein Fehler auftritt. Wenn es einen Try-Except-Teil gibt, der die Ausnahme behandelt, fangen Sie die dort ausgelöste Ausnahme ab. Da es für den Mechanismus verantwortlich ist, ist es möglich, den Aufruf "print ()" zu überspringen.

Auch wenn das Auftreten einer Ausnahme als Endbedingung angesehen wird

Es ist auch nicht StopIteration eines iterierbaren Objekts, sondern stoppt, wenn eine Ausnahme auftritt. Es scheint, dass es durch eine solche Spezifikation als Schleifenendbedingung verwendet werden kann.

Glücklicherweise liegt der normale Fizzbuzz zwischen "1 und 100". Wenn 100 als Zeichenfolge verwendet wird und deren Länge verwendet wird, ist "len (" 100 ")" 3, daher sollte am Anfang der 3. Ziffer eine Ausnahme ausgelöst werden. Sie können dies tun, indem Sie eine Liste (xs) der Länge 3 erstellen und dies mit "xs [len (str (i))]" tun.

Deshalb

Ich dachte, es wäre besser, es mit einigen Einschränkungen zu schreiben, aber mir fiel nichts besonders Gutes ein. Es ist nutzlos rekursiv anstatt zu schleifen.

import sys

xs = ["fizz", "", ""]


def g(i, x, out):
    try:
        return out((i % 5) or "buzz")
    except TypeError:
        try:
            x = xs[i % 3] or (i % 5) / (i % 5) and i
            return out(i, int(x), out)
        except ValueError:
            try:
                x += g(i, x, lambda y: y)
            except TypeError:
                pass
        except ZeroDivisionError:
            x = "buzz"
        out(i, x, out)


try:
    g(1, None, lambda i, x, out: xs[len(str(i))][g(i + 1, sys.stdout.write("{}\n".format(x)), out)])
except IndexError:
    pass

Danach scheint es in Ordnung zu sein, aus der Fehlermeldung der Ausnahmebehandlung Fizzbuzz zu machen, aber ich habe es gestoppt.

Recommended Posts

Fizzbuzz mit Ausnahmebehandlung
Ausnahmebehandlung
FizzBuzz in Python3
Behandlung von Python-Ausnahmen
Behandlung von Python-Ausnahmen
Umgang mit Yaml mit Python
Python, über die Ausnahmebehandlung
Behandlung von Python-Ausnahmen (Python-Lernnotiz ⑥)
Ausnahmebehandlung während der Python-API-Kommunikation
Wirf absichtlich eine Ausnahme mit Raise
Stapelverfolgung mit Python-Ausnahme anzeigen
Umgang mit regulären Ausdrücken durch PHP / Python
[Einführung in die Udemy Python3 + -Anwendung] 65. Ausnahmebehandlung
[Einführung in cx_Oracle] (12.) DB-Ausnahmebehandlung
Ein Forscher eines Pharmaunternehmens fasste die Ausnahmebehandlung von Python zusammen
Python-Ausnahmebehandlung etwas bequemer
Modulimport und Ausnahmebehandlung in Python
Ich habe gerade FizzBuzz mit AWS Lambda gemacht