Seite 1 von 1

Frage zu PyCharm Fehlermeldung

Verfasst: Mittwoch 14. Juli 2021, 16:14
von Medds
Hallo,
ich bekomme in PyCharm immer folgende Fehlermeldung:

Code: Alles auswählen

Expected type 'Type[str]' (matched generic type '_VT'), got 'tuple[str]' instead
Ich belege ein Dictionary zuerst so vor:

Code: Alles auswählen

backup_paths = {
    'SOURCE': str,
    'TARGET': str,
    'LOG_PATH': str,
    'BACKUP_DIR': str,
    'EXCLUDE': str
}
Und überschreibe es dann so:

Code: Alles auswählen

                    backup_paths['SOURCE'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_orginal/",
                    backup_paths['TARGET'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_dahin/",
                    backup_paths['LOG_PATH'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_logfile/",
                    backup_paths['BACKUP_DIR'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_backupdir/",
                    backup_paths['EXCLUDE'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_exclude/Rsync-Exclude-Linux-Home/"
                    
Anfangs hatte ich bei der Vorbelegung nicht "str" , sondern "None" dort stehen, aber das hat auch keinen Unterschied gemacht.
Kann mir jemand sagen was diese Fehlermeldungen bedeuten, bzw. wie ich das richtig schreiben sollte?
Meine Vermutung ist, dass es mit dem zu tun hat, dass man in Python jetzt auch eine Type Annotation machen sollte, aber da steig ich noch nicht ganz durch wie man das machen sollte.

Vielen Dank im Voraus

Re: Frage zu PyCharm Fehlermeldung

Verfasst: Mittwoch 14. Juli 2021, 16:22
von __deets__
Das ist Unsinn mit dem vorbelegen. Du erzeugtes damit ein dictionary von String auf Typ (der zufällig String ist). Typannotationen gehören hinter den Variablennamen. Nicht in das Literal.

Oder du lässt sie einfach weg. Denn IMHO machen die nur das lesen schwerer.

Re: Frage zu PyCharm Fehlermeldung

Verfasst: Mittwoch 14. Juli 2021, 16:31
von Medds

Code: Alles auswählen

backup_paths = {
    'SOURCE': None,
    'TARGET': None,
    'LOG_PATH': None,
    'BACKUP_DIR': None,
    'EXCLUDE': None
}
Also ist es doch so richtig wie ich es zu Anfang hatte?

Soll ich den Fehler dann ignorieren?

Re: Frage zu PyCharm Fehlermeldung

Verfasst: Mittwoch 14. Juli 2021, 16:36
von __deets__
“Richtig” ist relativ. Ist auch keine Typannotation. Vorgelegen ist allgemein eher unüblich. Und es ist im Übrigen auch kein Fehler. Sondern eine Warnung.

Re: Frage zu PyCharm Fehlermeldung

Verfasst: Mittwoch 14. Juli 2021, 18:01
von kbr
Lass die type-annotations weg und alles ist gut.

Re: Frage zu PyCharm Fehlermeldung

Verfasst: Mittwoch 14. Juli 2021, 20:18
von darktrym

Code: Alles auswählen

 backup_paths['SOURCE'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_orginal/",
                    backup_paths['TARGET'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_dahin/",
                    backup_paths['LOG_PATH'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_logfile/",
                    backup_paths['BACKUP_DIR'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_backupdir/",
                    backup_paths['EXCLUDE'] = "/mnt/Laufwerke/11_Backup-Datengrab/test_exclude/Rsync-Exclude-Linux-Home/"
Wieso stehen da eigentlich Kommas überall?

Re: Frage zu PyCharm Fehlermeldung

Verfasst: Mittwoch 14. Juli 2021, 21:05
von __blackjack__
Wahrscheinlich weil irgendwie unbewusst schon klar war, dass das eigentlich *so* aussehen sollte:

Code: Alles auswählen

    backup_paths = {
        "SOURCE": "/mnt/Laufwerke/11_Backup-Datengrab/test_orginal/",
        "TARGET": "/mnt/Laufwerke/11_Backup-Datengrab/test_dahin/",
        "LOG_PATH": "/mnt/Laufwerke/11_Backup-Datengrab/test_logfile/",
        "BACKUP_DIR": "/mnt/Laufwerke/11_Backup-Datengrab/test_backupdir/",
        "EXCLUDE": "/mnt/Laufwerke/11_Backup-Datengrab/test_exclude/Rsync-Exclude-Linux-Home/",
    }
Wenn alle Dummy-Werte ersetzt werden, dann sollte man gar nicht erst mit Dummy-Werten anfangen.

Re: Frage zu PyCharm Fehlermeldung

Verfasst: Donnerstag 15. Juli 2021, 12:46
von DeaD_EyE

Code: Alles auswählen

from typing import TypedDict, Optional

PathDict = dict[str, Optional[str]]


class PathDict2(TypedDict):
    sys: Optional[str]
    foo: str


my_paths1: PathDict = {
    "sys": "foo",
    "bar": 42,
    "foo": None,
    "test": [],
}

my_paths2: PathDict2 = {
    "sys": 42,
    "foo": "foo",
}

Sieht dann so aus: https://ibb.co/2gkzRSF

Einfacher wäre es aber noch dict[str, str] zu nutzen, wenn man ausschließlich str für die keys und values nutzt.