Seite 1 von 1

Noob: Else wird komplett ignoriert, wieso?

Verfasst: Donnerstag 15. Oktober 2020, 13:50
von maowB
Hallo, ich bin leider blutiger Anfänger; nun habe ich ein Problem. Nachdem ich endlich herausgefunden habe, wie ich nach einem bestimmten Wort trennen kann habe ich das gleich versucht auf meinen Code anzuwenden @streamlit

Ich habe zwei Exceldateien. Einmal wo bei der entsprechenden Position GEO vorkommt, da funktioniert das einwandfrei. Sobald jedoch das besagte "erfolgte" steht, passiert einfach nix. Er schreibt ganz stumpf das hin. Hab es über st.write("test") getestet ob die else überhaupt anwendung findet; und siehe da: nix passiert. Scheinbar wird die else komplett ignoriert; weiß jemand wieso?

Code: Alles auswählen

       if single_file:
            Auftraggeber=(df.iat[2,1])
            Probenahmeort=(df.iat[7,1])
            Probenahme=(df.iat[8,1])
            
            if Probenahme.find("GEO"):
                Probenehmer=(Probenahme.split("-")[-1])#greift auf das letzte Element im Bereich Probenahme zu@[-1]
            else:
                st.write("test")                                   #wird komplett ignoriert, wieso???
                Probenehmer = Probenahme[len("erfolgte durch"):]   #wieso geht das nicht???

            datum=' 01.01.1001 '
            st.markdown('Projekt- bzw. Auftragsnummer: '+Projektnummer+' / '+Auftragsnummer)
            st.markdown('Auftraggeber: '+Auftraggeber)
            st.markdown('Probenahmeort: '+Probenahmeort)
            st.markdown('Probenehmer: '+Probenehmer)
        else:
            st.markdown('**Zur Darstellung der Basisdaten bitte zunächst eine Excel-Datei importieren **!')

Re: Noob: Else wird komplett ignoriert, wieso?

Verfasst: Donnerstag 15. Oktober 2020, 13:58
von Sirius3
`find` macht nicht das, was Du denkst, was es tut. Benutze den in-Operator.
Da sind einige Klammern zu viel. Statt mit + Strings zusammenzustückeln, benutzt man Formatstrings.

Re: Noob: Else wird komplett ignoriert, wieso?

Verfasst: Freitag 2. Juni 2023, 11:12
von __blackjack__
@maowB: Wenn man nur einmal aufteilen will, dann sollte man entweder `split()` das auch mitteilen, beziehungsweise `rsplit()` in diesem Fall, oder `partition()`/`rpartition()` verwenden.

Da fehlt ein bisschen Fehlerbehandlung für den Fall, dass die Daten nicht so aussehen wie erwartet.

`datum` wird nirgends verwendet.

Ungetestet:

Code: Alles auswählen

        if single_file:
            probenahme = df.iat[8, 1]
            if "GEO" in probenahme:
                _, delimiter, probenehmer = probenahme.rpartition("-")
                if not delimiter:
                    raise ValueError(f"expected '-' in {probenahme!r}")
            else:
                prefix = "erfolgte durch"
                if not probenehmer.startswith(prefix):
                    raise ValueError(
                        f"exptected {probenahme!r} to start with {prefix!r}"
                    )
                probenehmer = probenahme[len(prefix) :].lstrip()

            st.markdown(
                f"Projekt- bzw. Auftragsnummer: {projektnummer} /"
                f" {auftragsnummer}"
            )
            st.markdown(f"Auftraggeber: {df.iat[2, 1]}")
            st.markdown(f"Probenahmeort: {df.iat[7, 1]}")
            st.markdown(f"Probenehmer: {probenehmer}")
        else:
            st.error(
                "**Zur Darstellung der Basisdaten bitte zunächst eine"
                " Excel-Datei importieren **!"
            )