Frage zu PyCharm Fehlermeldung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Medds
User
Beiträge: 27
Registriert: Samstag 17. Oktober 2020, 19:19

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Medds
User
Beiträge: 27
Registriert: Samstag 17. Oktober 2020, 19:19

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?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

“Richtig” ist relativ. Ist auch keine Typannotation. Vorgelegen ist allgemein eher unüblich. Und es ist im Übrigen auch kein Fehler. Sondern eine Warnung.
Benutzeravatar
kbr
User
Beiträge: 1504
Registriert: Mittwoch 15. Oktober 2008, 09:27

Lass die type-annotations weg und alles ist gut.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

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?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
__blackjack__
User
Beiträge: 14002
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Benutzeravatar
DeaD_EyE
User
Beiträge: 1224
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten