Seite 1 von 1
Fehlermeldung
Verfasst: Montag 27. Juli 2020, 12:41
von MMAGAMER
Hey, wie kann man folgende Fehlermeldung beheben?
Code: Alles auswählen
import turtle as tu
lines = 100
with open("pi.txt","r") as f:
pi = f.read()
for n in range(lines):
zahl = int(pi[n])
rotation = zahl * 36
tu.setheading(rotation)
tu.forward(50)
tu.done()
Code: Alles auswählen
ValueError: invalid literal for int() with base 10: 'ÿ'
Re: Fehlermeldung
Verfasst: Montag 27. Juli 2020, 12:45
von __deets__
Keine Zeichen in der Datei haben, die nicht zu einer Zahl konvertierbar sind.
Re: Fehlermeldung
Verfasst: Montag 27. Juli 2020, 12:50
von MMAGAMER
__deets__ hat geschrieben: Montag 27. Juli 2020, 12:45
Keine Zeichen in der Datei haben, die nicht zu einer Zahl konvertierbar sind.
In der Datei sind nur Zahlen.
Re: Fehlermeldung
Verfasst: Montag 27. Juli 2020, 13:02
von Sirius3
Du hast das falsche Encoding angegeben. Über einen Index zu iterieren, macht man in Python nicht.
Code: Alles auswählen
with open("pi.txt", encoding="utf-8-sig") as f:
pi = f.read(lines)
for digit in pi:
zahl = int(digit)
...
Re: Fehlermeldung
Verfasst: Montag 27. Juli 2020, 14:02
von MMAGAMER
Sirius3 hat geschrieben: Montag 27. Juli 2020, 13:02
Du hast das falsche Encoding angegeben. Über einen Index zu iterieren, macht man in Python nicht.
Code: Alles auswählen
with open("pi.txt", encoding="utf-8-sig") as f:
pi = f.read(lines)
for digit in pi:
zahl = int(digit)
...
Was ist mit
gemeint?
Re: Fehlermeldung
Verfasst: Montag 27. Juli 2020, 14:24
von Sirius3
Das ist das Encoding, in der Du Deine Zahlen in der Datei pi.txt gespeichert hast.
Re: Fehlermeldung
Verfasst: Montag 27. Juli 2020, 14:30
von MMAGAMER
Sirius3 hat geschrieben: Montag 27. Juli 2020, 14:24
Das ist das Encoding, in der Du Deine Zahlen in der Datei pi.txt gespeichert hast.
Ok danke dir

Re: Fehlermeldung
Verfasst: Dienstag 28. Juli 2020, 09:20
von pintman
UTF-8 ist mir bekannt, aber welche Bedeutung hat "-sig" und in welchen Fällen wird es "UTF-8" vorgezogen?

Re: Fehlermeldung
Verfasst: Dienstag 28. Juli 2020, 10:19
von Sirius3
utf-8-sig hat gar keine Bedeutung, es ist nur so, dass Microsoft sich wieder etwas ausgedacht hat, was darauf schließen läßt, dass jemand den Sinn nicht verstanden hat und deshalb in ihrem Editor UTF8 grundsätzlich ein Zeichen am Anfang anhängt.
In Unicode gibt es zwei Codepoints, \uFEFF und \uFFFE, ersteres ist der Byte-Order-Mark und zweiteres ein ungültiges Zeichen. Bei 16 oder 32bit-Codierungen von Unicode ist es wichtig herauszufinden ob es sich um little-endian oder big-endian handelt, was man anhand der Byte-Order-Mark ganz gut kann. Bei UTF8-Codierung macht das Zeichen aber keinen Sinn, weil es keine Ordnung bei einem Byte gibt.
Re: Fehlermeldung
Verfasst: Dienstag 28. Juli 2020, 11:23
von __deets__
Der Sinn lag wohl darin, Editoren einen Hinweis zu geben, dass ein UTF8-enkodierter Text eben das ist. Statt auf heuristiken zu setzen.
Re: Fehlermeldung
Verfasst: Dienstag 28. Juli 2020, 13:52
von pintman
Danke für die "Klarstellung" und Einordnung.
