Hallo Leute,
ich wünsche ein guten Morgen und hoffe auf eure Hilfe.
Bedingt durch ein etwas langes Kabel (habe bereits einen Extentionchip in die Leitung eingebaut) bekomme ich doch manchmal Problem Ddressen auf dem I2c Bus anzusprechen.
Ich habe mich erfolgreich damit beholfen, mit "Try und Except" zu arbeiten.
das Programm sieht so aus:
try:
.xxxxx
except IOError:
..try:
.. xxxx
. except IOError:
.. try:
...xxxxx
... exept IOError
.. xxxxx
wer hat eine Idee diese Verschachtelung zu verkürzen. Ich bin noch Anfänger mit Python und habe keine Plan das selber zu programmieren.
Danke schon mal vorab
Gruß
Knuffi
Try:/Except IOError kaskadieren
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Was soll denn da passieren? Soll das ganze X-mal wiederholt werden, für den Fall eines ``IOError``? Wenn ja, löst man das ganz einfach in einer Schleife, die X-mal wiederholt wird. Im Erfolgsfall verlässt man diese vorzeitig mittels ``return`` oder ``break``.
Du hättest für den Code die Python Code Tags verwenden sollen. Man muss da kein valides oder lauffähiges Python reinschreiben, die "Lücken" kann man auch mit Kommentaren füllen:
Ist einfacher, als sich mit "Punkten" zu behelfen, die die Einrückungsebene symbolisieren sollen
Du hättest für den Code die Python Code Tags verwenden sollen. Man muss da kein valides oder lauffähiges Python reinschreiben, die "Lücken" kann man auch mit Kommentaren füllen:
Code: Alles auswählen
try:
# do something
except IOError:
try:
# try again
except IOError:
pass
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@Knuffi: In dem man den Quelltext in Code-Tags setzt. Über dem Textfeld zum bearbeiten des Beitrags ist eine Button-Leiste da ist unter anderem ein Knopf mit der Aufshrift `Code` mit einer Dropdown-Box daneben wo man vorher die Sprache auswählen kann — Python ist die Voreinstellung. Du könntest bei Hyperion's Beitrag auch mal auf zitieren klicken, dann siehst Du wie es dort im Quelltext des Beitrags aussieht.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Du meinst das Setzen von Tags im Forum? Schau doch einfach beim Erstellen / Editieren auf die Menüleiste *direkt* oberhalb des großen Eingebafensters. Da Gibt es einen Button, auf dem Steht "Code" und daneben ein Auswahlmenü für die Sprache, wo Python voreingestellt ist. Den drückst Du und schon hast Du so etwas im Text stehen:
(Ohne die Leerzeichen)
Zwischen die Tags (Paare aus eckigen Klammern) schreibst Du Deinen Code.
Code: Alles auswählen
[ Code=python file=Untitled.py ][ /Code ]
Zwischen die Tags (Paare aus eckigen Klammern) schreibst Du Deinen Code.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Code: Alles auswählen
[try]
[xxxx]
except IOError:
[try
[xxxx]
except IOError
[xxxx]
funktioniert irgendwie nicht
HILFE
Gruß
Knuffi
Zuletzt geändert von Hyperion am Samstag 21. Februar 2015, 12:13, insgesamt 1-mal geändert.
Grund: Schließendes Code Tag hinter den Code gesetzt ;-)
Grund: Schließendes Code Tag hinter den Code gesetzt ;-)
Code: Alles auswählen
try:
mach irgendwas
except IOError:
mach noch was
geht deutlich einfacher
bleibt nur noch das eigenliche Problem, wie ich die Kaskadierung verkürzen kann:
Code: Alles auswählen
try:
a = bus.read_byte.data(0x38,0x01)
Except IOError:
try:
a = bus.read_byte.data(0x38,0x01)
Except IOError:
try:
a = bus.read_byte.data(0x38,0x01)
Except IOError:
try:
a = bus.read_byte.data(0x38,0x01)
Knuffi
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das habe ich Dir doch schon in meiner ersten Antwort im ersten Absatz beantwortetKnuffi hat geschrieben: bleibt nur noch das eigenliche Problem, wie ich die Kaskadierung verkürzen kann:
Im übrigen solltest Du Dich auch bei solchen Code Fragmenten an PEP8 halten, was insbesondere eine Einrückungstiefe von vier Leerzeichen verlangt. Das liest sich einfach besser, wenn das einheitlich uns sauber ausgeführt ist.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Bei einer ``while``-Schleife hast Du natürlich im schlimmsten Fall eine Endlosschleife. Entweder fügt man also ein zusätzliches Abbruchkriterium über die Zeit hinzu, oder man nutzt doch eine ``for``-Schleife und eine fixe Anzahl von Versuchen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert