Ich habe [einen bestimmten Artikel] gesehen (http://qiita.com/pondzu/items/b2ab4bc09406152621ea) und es schien interessant zu sein, also habe ich es versucht.
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.
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.
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