<jupyter_start><jupyter_text>0.1 Fehlerbehandlung und Hilfe zu Python findenIm Anschluss dieser Übungseinheit kannst du ...+ Fehlermeldungen verstehen+ verschiedene Arten von Fehlermeldungen einordnen+ verschiedene Vorgehensweisen zur Behebung von Fehlermeldungen anwenden+ Hilfe zu Python finden  1. Aufbau von FehlermeldungenFehlermeldungen (Englisch: error messages) helfen dir, deinen Code zu korrigieren. Selbst die erfahrensten Menschen, die beruflich coden, verbringen den größten Teil ihrer Programmierzeit damit, den Fehler-Hinweisen zu folgen und somit ihren Code gemäß der jeweiligen Programmiersprache zu schreiben. Deshalb ist es beim Programmieren wichtig, Fehlermeldungen in erster Linie als Hilfe zu verstehen und sie lesen zu können.   1.1 Beispiel 1An einem Beispiel aus der Arithmetik siehst du nun den allgemeinen Aufbau einer Fehlermeldung:<jupyter_code>a = 0

print(5/a)<jupyter_output><empty_output><jupyter_text>ZeroDivisionError  Eine Fehlermeldung erscheint in roter Schrift. Diese hier besagt eindeutig, dass es sich bei ZeroDivisionError um einen Fehler wegen der Division durch 0 handelt. Es gibt aber auch Fehlermeldungen, die nicht ganz so präzise sind.  Traceback (most recent call last)  Das heißt: Der Fehler wird bis zu seinem Ursprung verfolgt. Wo dessen Wurzel liegt, erscheint in der Fehlermeldung in den Zeilen darunter. Diese Zeilen (1, 2, 3) beginnen bei der Ursache und enden beim Auslöser. Daran kannst du erkennen, dass es zum Nachvollziehen der Fehlerursache besser ist, Fehlermeldungen von oben nach unten zu lesen.  Rückverfolgung mit Zeilenangabe  1 a = 0 =>In unserem Fall beginnt der Fehler bei Zeile 1, in welcher die Variable, die zur Fehlermeldung führt, deklariert (benannt) und ihr ein Wert zugewiesen wurde. Der grüne Pfeil ----> zeigt auf den Programmteil, der schließlich den Fehler ausgelöst hat. Bei größeren Programmen kann es mehrere Ursachen und mehrere Auslöser geben.  ipython-input-1-7c9d3862969c> in $$     Diese, über den Zeilenangaben stehende Zeile ist eher bei komplexeren Programmen wichtig zu verstehen, in denen mit Modulen gearbeitet wird. Ansonsten kannst du sie erst einmal ignorieren. Aufgeschlüsselt bedeuten die Angaben:  * ipython-input-1-7c9d3862969c>      * ipython: ist das Kernel (der Betriebssystemkern), mit welchem Jupyter Notebooks laufen    * input-1-: Zeigt Nummer der Eingabe- bzw. Code-Zelle, in welcher der Fehler aufgetreten ist    * 7c9d3862969c: ist die individuelle Adresse/Referenz des Fehlers (eher irrelevant für die Fehlerbehebung)  * in $$    * bezeichnet das Python-Modul, in welchem der Fehler aufgetreten ist    * da wir hier kein Modul verwenden, erscheint keine namentliche Bezeichnung eines Moduls      ZeroDivisionError: division by zero  Abschließend wird noch einmal die Art des Fehlers genannt und eine etwas genauere Beschreibung zu dem aufgetrenen Fehler erfolgt. **Doch wie werden wir diese Fehlermeldung jetzt los?**  In der oberen Code-Zelle sollte eine Division mit einer Variablen durchgeführt werden, die leider zu einem Fehler geführt hat. Womöglich hat man sich bei der Eingabe der Zahlen vertippt.  Übung: Schreib den Code so um, dass eine Division ohne die Fehlermeldung (zur Division durch null) ausgeführt werden kann.<jupyter_code>a = 0

print(5/a)<jupyter_output><empty_output><jupyter_text>Tipp: Im Zusammenhang mit Fehlermeldungen wirst du im Web oft die englische Phrase "throws an error" finden. Sie wird verwendet, wenn Code einen Fehler auslöst, also "code xy throws an error".  Übersetzt wird das mit: "Code XY wirft einen Fehler."  Auch, wenn das im Deutschen ungewöhnlich klingt, wird es im Fachjargon so genannt.   1.2 Beispiel 2Das nächste Beispiel wirft einen Syntaxfehler. Das ist ein Fehler, der aufgrund fehlender oder falsch gesetzter Zeichen entsteht:<jupyter_code>print(5<jupyter_output><empty_output><jupyter_text>**Gehen wir den Aufbau dieser Fehlermeldung durch:**  File ipython-input-3-56ada56225c1  , line 1 * File heißt auf Deutsch Datei* ipython: ist (wie in vorheriger Fehlermeldung) das Kernel (der Betriebssystemkern), mit welchem Jupyter Notebooks laufen* input-3-: zeigt (wie in vorheriger Fehlermeldung) die Nummer der Eingabe- bzw. Code-Zelle, in welcher der Fehler aufgetreten ist* 56ada56225c1: ist die individuelle Adresse/Referenz des Fehlers (eher irrelevant für die Fehlerbehebung)* line 1: in Zeile 1 der Code-Zelle ist der Fehler aufgetretenprint(5 - und Aufwärtspfeil - ^  Das ist die Abbildung der fehlerbehafteten Zeile.Der Aufwärtspfeil zeigt auf die Stelle, welche die Fehlermeldung auslöst. **Achtung:** Bei mehreren Syntax-Fehlern wird meistens nur einer angezeigt und der Aufwärtspfeil muss dann nicht unbedingt an einer der fehlerhaften Stellen stehen.  SyntaxError  Das ist die Bezeichnung des Fehlers. An dieser Stelle könnten auch andere Arten von Fehlern stehen, wie z.B. FileError. Syntaxfehler sind, wie oben kurz erwähnt, Fehler, die durch falsche oder fehlende Zeicheneingaben hervorgerufen werden. Zu den Zeichen zählen Buchstaben, Zahlen, Kommas usw. Alles, was du auf deiner Tastatur findest und das Zeichen auf dem Bildschirm abbildet, gehört zu ihnen. Sie sind die wohl am häufigsten auftretenden Fehler, die oft simpler Schusseligkeit geschuldet sind.     unexpected EOF while parsing  **EOF** heißt: End Of File, das Ende der Datei (des ausgeführten Code-Blocks,hier: der Code-Zelle) wurde erreicht. Komplett übersetzt lautet die Zeile: "Unerwartes Ende des Code-Blocks, während er durchlaufen wurde". Das Ende deines Codes wurde erreicht, bevor der Code erfolgreich ausgeführt werden konnte.    **Was bedeutet das nun alles zusammen?**  Offenbar befindet sich innerhalb des Codes ein Syntaxfehler - und zwar an der Stelle nach der 5. Sollte dir das Print-Statement nicht bereits aus vorherigen Lektionen bekannt sein, kannst du trotzdem darauf kommen, welches Zeichen fehlt, um eine korrekte Ausgabe zu erhalten. Überlege, was zu jeder sich öffnenden Klammer gehört, sowohl in der geschriebenen Sprache als auch in der Mathematik in Gleichungen.  Übung: Korrigiere den Code, sodass der Fehler verschwindet.<jupyter_code>print(5<jupyter_output><empty_output><jupyter_text>1.3 Beispiel 3Das nächste Beispiel löst einen Typfehler aus. Dieser entsteht, wenn Typen von Daten im Code miteinander kalkuliert werden, die nicht zusammenpassen. Ein anderes Beispiel hierfür wäre, würde man Buchstaben durch Zahlen teilen. Schaue dir ein weiteres Beispiel unten an:<jupyter_code>a = 2,3

b = 1.5

a-b<jupyter_output><empty_output><jupyter_text>Screencast (zusätzlich)**Der Aufbau dieser Fehlermeldung ähnelt der aus Beispiel 1:**  TypeError  Es liegt ein Fehler bezüglich verschiedener Datentypen vor.  Traceback (most recent call last)  Der Fehler wird wieder bis zu seinem Ursprung verfolgt. Das kannst du in den darunter folgenden Zeilen genauer nachlesen.  Rückverfolgung mit Zeilenangabe  3 b = 1.5 =>In unserem Fall beginnt der Fehler bei Zeile 3, bei der Variable **b** bzw. ihres Wertes. Der grüne Pfeil ----> zeigt wieder auf den Programmteil, der schließlich den Fehler ausgelöst hat:  a - b  Bei genauerem Hinsehen in der Fehlermeldung erkennst du, dass das Minuszeichen in einer speziellen Farbe dargestellt ist, um dich darauf hinzuweisen, dass es bei dieser mathematischen Operation zu dem Fehler kam.  ipython-input-5-7c9d3862969c> in $$     Dieser Teil ist analog zu den vorherigen Beispielen. Die Zahl nach "input" ist die Nummer der fehlerhaften Code-Zelle.  TypeError: unsupported operand type(s) for -: 'tuple' and 'float'  Abschließend wird noch einmal die Art des Fehlers genannt und eine etwas genauere Beschreibung zu dem aufgetrenen Fehler erfolgt. Auf Deutsch übersetzt lautet sie: "Nicht unterstützte Datentypen für '-': 'Tuple' und 'Float'". Hier konnte der Datentyp Tuple nicht mit dem Datentyp Float subtrahiert werden. Was sind diese Datentypen?* Tuple    * eine Anreihung von Werten, die nicht mehr veränderbar ist    * die Werte eines Tuples sind geordnet (engl.: ordered)        * das bedeutet, sie haben eine fest indexierte Anordnung, die sich nicht mehr ändert        * die Werte bleiben an der gleichen Stelle stehen und werden nicht miteinander vertauscht    * Beispiel 1, ein Tuple bestehend aus Strings: ``t1 = ('Affe', 'Bison', 'Chamäleon')``    * Beispiel 2: reihe_2, ein Tuple bestehend aus Integers: ``t2 = (11, 22, 103, 477)``    * die Werte der Reihen sind stets eingeklammert und mit einem Komma getrennt    * es gibt aber auch das sogenannte "Tuple Packing", bei welchem ein Tuple ohne Klammern definiert wird        * Beispiel: ``t3 = 'Hallo', 2.5, 3``  * Float    * "Float" steht für Fließkommazahlen    * das sind Zahlen, die Nachkommastellen enthalten, wie: 1,23 und 1688,01234    * sie sind das Gegenstück zu Ganzzahlen, wie: 1 und 1688    * **Achtung:** Im Englischen werden Fließkommazahlen mit einem Punkt geschrieben, wie: 1.23 und 1688.01234      **Langsam kommen wir der Sache näher! Welches davon ist nun Variable a, welches Variable b?**  Um diese Frage zu beantworten, können wir uns strikt an die Reihenfolge der Nennung der Datentypen in der Fehlermeldung halten. Dort erscheint zuerst 'Tuple', dann 'Float'. Also muss Variable a als Tuple erkannt worden sein und Variable b als Float. Außerdem weißt du jetzt bereits, dass Floats die Zahlen sein müssen, deren Nachkommastellen mit einem Punkt von der ganzen Zahl getrennt sind. Demzufolge kann nur b ein Float sein.  **Kommst du auf des Rätsels Lösung?**  Weil die Werte von Variable a mit einem Komma getrennt sind und sie eine geordnete Reihe darstellen, muss Python sie als Tuple erkannt haben. Die Klammern waren hierfür nicht nötig. Weil Python a als Tuple erkannt hat, war bis dahin alles in Ordnung für Python, denn der Datentyp Tuple existiert ja und ist zulässig. Schwierig wurde es erst in Zeile 3, als der Datentyp Float auftauchte. Schließlich sollte eine Reihe mit einer Fließkommazahl verrechnet werden. Genauer gesagt, eine Reihe, bestehend aus 2 und 3 sollte minus 1,5 gerrechnet werden.  Tipp: Daran merkst du, dass man Fehlermeldungen genau von Anfang bis Ende lesen sollte. Denn auf den ersten Blick sah es so aus, als würde der Fehler bei Variable b in Zeile 3 liegen. Erst der Hinweis ganz unten hat offenbart, dass die Verrechnung von Tuple mit Float für Python unmöglich ist.  Möchtest du mehr über Datentypen wissen, findest du detailliertere Informationen dazu in Kapitel "3.1 Python als Taschenrechner". Übung: Schreib den Code so um, dass die Berechnung fehlerfrei ausgeführt wird.<jupyter_code>a = 2,3

b = 1.5

a-b<jupyter_output><empty_output><jupyter_text>Nun kennst du den allgemeinen Aufbau jeder Fehlermeldung. Du kannst dich an diesem Wissen immer wieder orientieren und diesen Warnhinweisen damit ihre kryptische vermeintliche Bedrohung nehmen.  Anhand dieses logischen Aufbaus kannst du erkennen, dass sie in erster Linie dazu da sind, dich beim Programmieren zu unterstützen.   2. Hilfe findenWenn man neu im Feld des Programmierens ist, erscheinen einige Fehlermeldungen nicht gerade selbsterklärend. Doch es gibt Hilfe! Die bestmöglichen Quellen für Hilfe - neben menschlicher Hilfe und Google im Allgemeinen - sind ...   2. a) StackoverflowBesonders beliebt bei Menschen, die sich mit Programmieren befassen, ist die Seite [https://stackoverflow.com/](Hidden_landing_URL). Dort helfen diese sich untereinander und du kannst oftmals wertvolle Tipps erhalten, welche auf anderen Seiten nicht zu finden sind. Auf stackoverflow sagen zum Beispiel andere Folgendes zu der Fehlermeldung ZeroDivisionError  :[https://stackoverflow.com/questions/29836964/error-python-zerodivisionerror-division-by-zero](Hidden_landing_URL)Eine Anmeldung brauchst du für stackoverflow nur, wenn du selbst eine Frage stellen möchtest. Für die gängigsten Fragen wird das nicht nötig sein.   2. b) Python-DokumentationAuch die Python-Dokumentation ist eine gute Anlaufstelle, wenn du mal nicht weißt, wie du etwas umsetzen und/oder mit einer Aufgabenstellung weiterkommen kannst: [https://www.python.org/doc/](Hidden_landing_URL)   2. c) Interne HilfeNicht zu vergessen, in einem Jupyter Notebook oder einer anderen IDE (siehe folgenden Tipp) kannst du immer mit einem Fragezeichen hinter einer Variable, Funktion und ähnlichem nähere Informationen zu ihr erhalten. Dies am Beispiel einer Funktion:``type?``Tipp: Eine IDE (Integrated Development Environment) ist eine integrierte Entwicklungsumgebung zum Coden. Sie bietet einem verschiedene Werkzeuge und zusätzliche Hilfsmittel, die das Programmieren erleichtern. Bekannte Beispiele sind PyCharm, Eclipse und Visual Studio Code. Diese unterscheiden sich von Jupyter Notebook besonders darin, dass sie nicht im Browser laufen und Programme nicht auf einzelne Zellen verteilt sind.    Sie stehen kostenlos zur Verfügung. Bei Interesse kannst du sie also selbst ausprobieren. PyCharm ist die gängigste IDE für Python.Übung: Probier das am besten mal selbst aus. Merke dir dabei, dass Funktionen, wie .z.B. type(), ohne die runden Klammern geschrieben werden, wenn für sie die interne Hilfe aufgerufen werden soll. Klasse! Jetzt weißt du, dass eine Fehlermeldung wissenswerte und hilfreiche Informationen enthält, mit denen du Code-Hürden überwinden kannst.  Welche Arten es davon gibt, darum geht es im folgenden Teil:  3. Arten von FehlermeldungenWie du wahrscheinlich bereits festgestellt hast, gibt es viele verschiedene Arten von Fehlermeldungen. Wir gehen nur die für dich im Moment wichtigsten durch, denn mit den Fehlern, die für den späteren Kursverlauf relevant sind, wirst du dann auch besser zurechtkommen.Die häufigsten Fehlermeldungen sind - einen davon hast du schon kennengelernt:* SyntaxError = Zeichenfehler (vergessene Klammer, fehlende Anführungszeichen sowie Gedankenstriche (bei Text/Strings) etc.* NameError = falsch eingegebener oder nicht existenter Variablenname   3.1  SyntaxfehlerIn der unteren Code-Zelle siehst du einen Syntaxfehler. Wenn du bereits das Kapitel "3.3 Namenskonventionen, Strings und Characters" durchgegangen bist, wirst du wahrscheinlich sofort wissen, was hier zu tun ist. Jegliche Art von Text, das ist der Datentyp String, wird innerhalb von Python in Anführungsstriche gesetzt, bevorzugt in einfache Anführungsstriche. Kannst du mit diesem Wissen die Fehlermeldung verschwinden lassen?Übung: Kopiere die Code aus der hier darunterliegenden Zelle in die nächste und korrigiere ihn dort.<jupyter_code>print(Ich kann Fehlermeldungen beheben.)<jupyter_output><empty_output><jupyter_text>3.2  NamensfehlerNamensfehler bzw. NameErrors können verschiedene Ursachen haben:* ein Variablenname wurde nicht definiert. Die Variable xistiert somit nicht, da sie nicht deklariert (= benannt) wurde* der Variablenname wurde falsch geschrieben. Dazu zählt nicht nur, wenn ein Buchstabe vergessen oder falsch geschrieben wurde, sondern auch, falls er nicht genau so mit Klein- und Großbuchstaben geschrieben wurde, wie bei der Deklaration (= Benennung) der Variable. Python ist "case-sensitive" -  die Groß- und Kleinschreibung muss beachtet werden.Übung: Kopiere die Codes aus den hier darunterliegenden Zellen und korrigiere sie in der jeweils nächsten Zelle.<jupyter_code># Tipp zu dieser fehlerhaften Zelle: Es kann nicht ausgegeben werden, das nicht existiert.
# Mit welchem Wert es existiert, spielt dabei keine Rolle.

print(j)
dog = 'Bello'
print(god)<jupyter_output><empty_output><jupyter_text>Tipp zur Anwendung von Variablennamen:Wenn du mit vielen Variablen arbeitest, kannst du die **Tabulator-Taste** zur Auto-Vervollständigung von Variablen nutzen.* Klicke dazu, zum Beispiel in den Klammern eines Print-Befehls, die Tabulator-Taste.* Daraufhin öffnet sich ein Drop-Down-Menü, das du mit den Pfeiltasten oder dem Mausrad durchblättern kannst. Dort sind alle verfügbaren Variablennamen gespeichert.* Je mehr richtige Anfangsbuchstaben du von deiner Variable eingibst, desto mehr verringert sich die Auswahl dieses Menüs und desto eher wird dein Variablenname weiter oben in der Liste auftauchen.Übung: Probier das am besten selbst mit verschiedenen Längen eines Variablennamens aus. Fang am besten an mit print(p) und dann print(py). Du kannst die untere Zelle dafür nutzen.<jupyter_code>snake = 'Python'
print()<jupyter_output><empty_output><jupyter_text>4. Semantische FehlerNicht immer weist eine Fehlermeldung dich auf Fehler in deinem Programm hin. Semantische Fehler sind solche, die einem logischen Denkfehler zugrunde liegen. Ein Beispiel hierfür sind falsche Berechnungen.Python kann nur Fehler erkennen, die innerhalb der Programmiersprache liegen. Darüber hinaus ist deine Aufmerksamkeit gefragt.  **Wie kannst du semantische Fehler vermeiden?**  * Geh die dir gestellte Aufgabe systematisch durch, Punkt für Punkt.* Grundsätzlich ist es immer eine gute Idee, Papier und Stift zur Hand zu nehmen und die Herangehensweise zu ihrer Lösung in logisch aneinandergereihten Schritten aufzuschreiben.* Skizziere dir die Abläufe, insbesondere, wenn einzelne Aufgabenpunkte sich überschneiden.* Fang erst an, den Code zu schreiben, nachdem du dir über den Ablauf zur Erfüllung der Aufgabe im Klaren bist.* Solltest du während des Programmierens auf Hürden stoßen, geh einen oder mehrere Schritte zurück, um dir klarzumachen, was die Aufgabe fordert und was du wie bisher davon umgesetzt hast (auch das wird auf Papier meistens übersichtlicher).* Frag dich während des Programmierens:    * Habe ich an alles gedacht?    * Stimmt die Reihenfolge meines Programms?    * Habe ich mich zuvor ausreichend über die theoretischen Hintergründe meiner Programmelemente informiert (Fachwissen)?    * Habe ich die richtigen Elemente, Funktionen, Formeln und Datenstrukturen (das sind sozusagen Sammlungen von Variablen) verwendet?    * Ergeben die Resultate Sinn?* Teste dein Programm!     * Hierzu bieten größere IDEs einen Debug-Modus. Du kannst auch ohne Debug-Modus dein Programm testen, indem du verschiedene Werte in den Variablen ausprobierst. Das hilft dir, zu erkennen, ob dein Programm zu logischen Ergebnissen führt.    * Lass dir auch Zwischenergebnisse anzeigen, denn Fehler in ihnen führen zu Fehlern im finalen Ergebnis.* Zeig dein Programm jemand anderem. Vier Augen sehen mehr als zwei.**Schau dir die folgende Rechnung zur Berechnung des ROI an (Return on Investment):**Tipp: ROI gibt an, wie hoch die Einnahmen im Vergleich zu den Ausgaben waren (in Prozent).<jupyter_code>total_revenue = 5000
total_cost = 747

roi = (total_revenue - total_cost) / total_revenue

roi<jupyter_output><empty_output><jupyter_text>"total_revenue" bezeichnet die Gesamteinnahmen, "total_cost" die Gesamtausgaben.Die Einnahmen betrugen also 85,06% der Ausgaben. Sie sollen also angeblich die Ausgaben nicht einmal zu 100% gedeckt haben. Macht das Sinn?  Tipp: In Jupyter Notebooks sind abgespeicherte Werte, wie z.B. total_cost = 747, fest abgespeichert, sobald die Code-Zelle ausgeführt wurde, in der sie hinterlegt wurden. Möchtest du mit dieser Variablen in einer anderen Code-Zelle darunter weiterarbeiten, brauchst du sie nicht erneut in der weiteren Code-Zelle anlegen. Einmal ausgeführt, ist sie für alle darunterliegenden Code-Zellen als z.B. total_cost verfügbar.Übung: Was ist an dieser Berechnung falsch? Korrigiere es, indem du die fehlerhafte Berechnung in der darunterliegenden, leeren Code-Zelle korrigierst. Solltest du nicht weiter wissen - das gilt für fast alle Schwierigkeiten - such im Internet nach der Herangehensweise anderer, in diesem Fall zur Berechnung des ROIs.<jupyter_code>total_revenue = 5000
total_cost = 747

roi = (total_revenue - total_cost) / total_revenue

roi<jupyter_output><empty_output><jupyter_text>Prima! Die gängigsten Fehlermeldungen sind dir nun vertraut und auch, wie du sie beheben kannst.      Es gibt noch eine andere Möglichkeit, Code zu debuggen (mit "debuggen" wird der Vorgang bezeichnet, in welchem man den Code fehlerfrei macht):  5. Fehler über Kommentare ausklammernEs kann vorkommen, dass Code größtenteils korrekt ist, aber eine einzige Zeile darin nicht. Woher sollst du wissen, ob es nicht mehrere Fehler, auch im restlichen Code gibt?  Dafür gibt es einen Trick, den du eigentlich schon kennst: Setze Kommentare ein!  Einzeilige Kommentare beginnen mit: `` Kommentar``  Mehrzeilige Kommentare werden geschrieben innerhalb von: ``""" Kommentar"""``  Mit ihnen kannst du einzelne oder mehrere Zeilen ausblenden. Gesetzt den Fall, dass der restliche Code unabhängig von der Ausblendung funktioniert, weißt du dann, dass der Fehler in den Kommentarzeilen liegen muss.Übung: Hier darunter siehst du ein Beispiel, in dem eine Code-Zeile den ordnungsgemäßen Programmablauf verhindert. Kommentiere die fehlerhafte Zeile aus, sodass die Fehlermeldung verschwindet.Tipp: Wie du es an den Beispielen in "3.2.1 Aufbau von Fehlermeldungen" gelernt hast, ist es am hilfreichsten, die Fehlermeldung von Anfang bis Ende durchzulesen. In der letzten Zeile wird bei den meisten Fehlermeldungen die Variable genannt, die Probleme verursacht. Auch mehrere Variablen können dort aufgelistet sein.<jupyter_code>PI = 3.14
radius_circle1 = 1.3
area_circle1 = PI * radius_circle1 * radius_circle1
prit(area_circle1)
radius_circle2 = 8.44
area_circle2 = PI * radius_circle2 * radius_circle2
print(area_circle2)
PI = 3.14
radius_circle1 = 1.3
area_circle1 = PI * radius_circle1 * radius_circle1
prit(area_circle1)
radius_circle2 = 8.44
area_circle2 = PI * radius_circle2 * radius_circle2
print(area_circle2)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0481158880245936, 'fraction_numerical': 0.011225487912804508, 'mean_word_length': 5.294341835238932, 'pattern_counts': {'":': 0, '<': 49, '<?xml version=': 0, '>': 56, 'https://': 3, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '170650', 'license': 'MIT', 'n_tokens_mistral': 7086, 'n_tokens_neox': 7237, 'n_words': 2810, 'path': '0 Allgemeines/0.1 Fehlerbehandlung & Hilfe zu Python finden.ipynb', 'repo_name': 'hannesrothe/dataliteracy', 'size': '21469'}