Wir veröffentlichen weiterhin eine Übersetzung einer Reihe von Artikeln über die Ähnlichkeiten und Unterschiede zwischen den beiden Sprachen.
Heute werden wir über Serialisierung von Wörterbüchern, JSON, Stammkunden, Fehler und Ausnahmen sprechen.
Andere Artikel in dieser Reihe:
- Der erste Teil ist die Typkonvertierung, der ternäre Operator, der Zugriff auf eine Eigenschaft über den Eigenschaftsnamen, Wörterbücher, Listen, Zeichenfolgen und die Verkettung von Zeichenfolgen.
- Dieser Artikel
- Dritter Teil : Modernes Python und JS: String-Muster (F-Strings), Listenentpacken, Lambda-Funktionen, Listeniterationen, Generatoren, Mengen.
- Der vierte Teil besteht aus Funktionsargumenten, die Klassen, Vererbung, Setter-Getter und Klasseneigenschaften erstellen und damit arbeiten.
Json
Wenn Sie mit vielen APIs arbeiten, ist es praktisch, Objekte in JSON-Objekte zu serialisieren, um die Übertragung und das anschließende Parsen zu vereinfachen.
Python hat ein Standard-JSON-Modul:
import json json_data = json.dumps(dictionary, indent=4) dictionary = json.loads(json_data)
Hier formatieren wir JSON mit einem Einzug von 4 Leerzeichen.
In JS gibt es ein JSON-Objekt mit Methoden zum Erstellen und Parsen von JSON-Zeichenfolgen:
json_data = JSON.stringify(dictionary, null, 4); dictionary = JSON.parse(json_data);
Analysieren Sie Zeichenfolgen mit Stammgästen
Im letzten Artikel haben wir mehrere Zeilen zu einer zusammengefasst. Aber wie kann man eine lange Zeichenfolge in mehrere teilen, insbesondere wenn das Trennzeichen kein einzelnes Zeichen wie ein Komma ist, sondern eine ganze Reihe verschiedener Optionen? Hier kommen reguläre Ausdrücke und die split()
-Methode zum Einsatz.
In Python bezieht sich die split()
-Methode auf ein Muster mit regulären Ausdrücken. So teilen Sie eine Textzeichenfolge in Satzzeichen auf:
import re
In JS bezieht sich die split()
-Methode auf Zeichenfolgen:
Regelmäßige Suche nach Muster
Reguläre Ausdrücke werden häufig verwendet, um Daten aus Formularen zu validieren.
Um beispielsweise die Richtigkeit der eingegebenen E-Mail-Adresse zu überprüfen, muss diese mit dem Muster für reguläre Ausdrücke verglichen werden.
Autor der Übersetzung im KursDas Überprüfen der Adresse mit Stammgästen ist eine nicht triviale Aufgabe und etwas komplizierter als die in diesem Artikel angegebene Methode
In Python sieht es ungefähr so aus:
import re
Wenn ein Textabschnitt mit einer Vorlage übereinstimmt, gibt die Verwendung der group()
-Methode den gesamten Abschnitt zurück, in dem Sie einzelne in der Vorlage definierte Gruppen auswählen können.
0 - die gesamte (Unter-) Übereinstimmung der Linie, 1 - die erste Gruppe, 2 - die zweite usw.
Wenn keine Übereinstimmungen gefunden werden, wird ein Objekt vom Typ None
zurückgegeben.
In JS gibt es eine String-Methode match()
, die entweder den übereinstimmenden Teil eines Strings oder null
zurückgibt.
In JS sieht das übereinstimmende Objekt wie ein Array aus. Das Element mit dem Index [0] ist die gesamte (Unter-) Zeile, die übereinstimmt, das 1. Element ist die erste Gruppe, das 2. ist die zweite usw. - alles in Übereinstimmung mit den in der Vorlage definierten Gruppen.
Manchmal muss zusätzlich zur Suche die Position der Probe im Text bestimmt werden. Dies kann mit der search()
-Methode erfolgen.
In Python bezieht sich diese Methode auf reguläre Ausdrücke und gibt ein übereinstimmendes Objekt zurück. Dieses übereinstimmende Objekt verfügt über eine start()
-Methode, die den Beginn des Auftretens dieses Teilstrings in der Hauptzeile zurückgibt:
text = 'Say hi at hi@example.com' first_match = pattern.search(text) if first_match: start = first_match.start()
Die JS-Methode verfügt über eine String-Methode search()
die den Index des Anfangs der Teilzeichenfolge zurückgibt. Oder -1
wenn keine Übereinstimmungen gefunden wurden.
text = 'Say hi at hi@example.com'; first_match = text.search(pattern); if (first_match > -1) { start = first_match;
Durch reguläre Ausdrücke durch Muster ersetzen
In der Regel ist ein Vorlagenersatz erforderlich, wenn Sie Daten löschen oder dem Text einige Eigenschaften hinzufügen möchten. Zum Beispiel können wir eine Zeile nehmen und alle gefundenen E-Mail-Adressen mit Links versehen:
Python hat eine sub()
Regex-Mustermethode dafür:
html = pattern.sub( r'<a href="mailto:\g<0>">\g<0></a>', 'Say hi at hi@example.com', )
JS-Entwickler können die Methode replace()
string verwenden:
html = 'Say hi at hi@example.com'.replace( pattern, '<a href="mailto:$&">$&</a>', );
In Python sind übereinstimmende Gruppen als \g<0>, \g<1>, \g<2>
usw. verfügbar.
In JS wie $&, $1, $2
usw.
Es ist auch möglich, den angepassten Teil durch eine Funktion zu ersetzen. Solche Funktionen sind nützlich, wenn der Umbruch des Quelltextes ersetzt oder andere Informationen über den Text gezählt, gesammelt oder abgerufen werden sollen. Wenn ich beispielsweise beim Ersetzen einen Funktionsaufruf verwende, kann ich eine HTML-Syntaxhervorhebung schreiben.
Lassen Sie uns alle E-Mail-Adressen in GROSSBUCHSTABEN ändern.
In Python erhält die Ersetzungsfunktion das übereinstimmende Objekt. Wir verwenden die group () -Methode, um Aktionen mit dem passenden Text auszuführen und als Ersatz zurückzugeben:
text = pattern.sub( lambda match: match.group(0).upper(), 'Say hi at hi@example.com', )
In JS erhält die Ersetzungsfunktion die gesamte Zeichenfolgenübereinstimmung, das erste Auftreten, das zweite usw. Wir führen die erforderlichen Aktionen aus und geben die geänderte Zeile zurück:
text = 'Say hi at hi@example.com'.replace( pattern, function(match, p1, p2) { return match.toUpperCase(); } );
Fehlerbehandlung
Im Gegensatz zu Python wird Browser-basiertes Front-End-JavaScript normalerweise nicht zum Schreiben / Lesen von Dateien oder zum Zugreifen auf Datenbanken verwendet. Daher sind try..catch
Blöcke in JS im Vergleich zu try..except
Blöcken in Python ziemlich selten.
In jedem Fall kann die Fehlerbehandlung jedoch in einem Benutzerskript durchgeführt, von einer Bibliotheksfunktion aufgerufen und im Hauptcode abgefangen werden.
Im folgenden MyException
Beispiel definieren wir unsere MyException
, MyException
sie in einer Funktion aus und sehen, wie Sie sie abfangen und im Block try..except..finally
:
class MyException(Exception): def __init__(self, message): self.message = message def __str__(self): return self.message def proceed(): raise MyException('Error happened!') try: proceed() except MyException as err: print('Sorry! {}'.format(err)) finally: print('Finishing')
Der folgende JS-Code macht dasselbe - wir definieren die MyException
Klasse, MyException
sie in einer Funktion aus, fangen sie ab und verarbeiten sie in einem try..catch..finally
Block:
function MyException(message) { this.message = message; this.toString = function() { return this.message; } } function proceed() { throw new MyException('Error happened!'); } try { proceed(); } catch (err) { if (err instanceof MyException) { console.log('Sorry! ' + err); } } finally { console.log('Finishing'); }
In beiden Sprachen verfügt die MyException
Klasse über einen message
und eine Methode für die Zeichenfolgendarstellung, abhängig vom Wert der message
.
Natürlich sollten Ausnahmen nur im Fehlerfall ausgelöst / ausgelöst werden. Und wenn Sie diesen Fehler in Ihrem Modul identifiziert haben.
Schlussfolgerungen
- Die Serialisierung zu / von JSON ist ziemlich einfach - was ist in Python, was ist in JS.
- Stammgäste sind in beiden Sprachen ein leistungsstarkes Textverarbeitungswerkzeug.
- Sie können Ersetzungen mithilfe von Funktionen vornehmen.
- In komplexeren Fällen können Sie Anruf, Abfangen und Fehlerbehandlung verwenden.
Wie bereits beim letzten Mal erwähnt, können Sie die hier bereitgestellten Codebeispiele zeilenweise abgleichen, um ähnliche Datenstrukturen und Arbeitsmethoden zu verstehen: Zeichenfolgen, Arrays, Wörterbücher, Zugriff auf Objekte.
Im nächsten Teil werden wir über Textmuster, das Entpacken von Listen, Lambda-Funktionen und Iterationen ohne Verwendung von Indizes, Generatoren und Mengen sprechen.