python fehlermeldung typeerror

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.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Man kann deinen Code nicht gerade gut lesen. Du verzichtest auf Kommentare und arbeitest umständlich.

Ich greife mal ein Beispiel heraus.
bluelagoon hat geschrieben:

Code: Alles auswählen

import re
config_file = 'dp_clienttask.ini'
file = open(config_file)
for line in file.readlines():
	if line.lower().strip().startswith("boottime"):
		choice = re.split('^boottime\s*=\s*([0-9]+)', line.lower().strip())[1]
	elif line.lower().strip().startswith("destination="):
		dest = re.split('^[dD][eE][sS][tT][iI][nN][aA][tT][iI][oO][nN]\s*=\s*(.+)\s*$', line.lower().strip())[1]
		file.close()
Hier überschreibst du das Builtin file. Zudem erfolgt das Schließen der Datei zu einem sehr merkwürdigen Zeitpunkt. Dann verwendest du innerhalb der Schleife immer line.lower().strip(), statt direkt mit dem passenden Wert durch die Schleife zu laufen. Wofür dann bei dem Pattern im regulären Ausdruck Großbuchstaben eingesetzt werden will sich einem nicht wirklich erschließen.

Code: Alles auswählen

import re
from itertools import imap
config_file = 'dp_clienttask.ini'
with open(config_file) as f:
    for line in imap(str.strip, imap(str.lower, f)):
        if line.startswith('boottime'):
            choice = re.split('^boottime\s*=\s*([0-9]+)', line)[1]
        elif line.startswith('destination='):
            dest = re.split('^destination\s*=\s*(.+)\s*$', line)[1]
Dieser Code ist schon mal besser und logischer, auch wenn sicherlich noch Optimierungspotenzial (z.B. in Richtung Fehlerbehandlung) drin ist.

Deine Fragen und Erklärungen hier im Forum sind jetzt leider ähnlich wüst wie dein Programmierstil. Aus dem Zusammenhang gerissen, ohne sauberes Konzept dahinter - kurz gesagt größtenteils unverständlich. Wir würden ja gerne sinnvoll helfen, aber du schaffst es einfach nicht, eine für uns verständliche Frage zu formulieren.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

dest =\\path\to\
und die schleife:
if 'windows' in platform.system().lower():
for line in os.popen(r"C:\WINDOWS\system32\ipconfig.exe /all"):
match = re.search('((?:[0-9A-Fa-f]{2}-){5}[0-9A-Fa-f]{2})', line)
die Macadresse sprich

dest, line, tarfile sind für subprocess wichtig die tarfile kann ich nur rausfinden WENN ich den richtigen Pfad zur Sicherung habe nur ich hab grad Probleme mit Macadresse und die Tarfile Sortierung das die zuletzt! erstellte Datei verwendet wird.
Nun verstanden?
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

bluelagoon hat geschrieben: Nun verstanden?
Ne. Am besten schon mal mehr Satzzeichen zur Untergliederung und python tags.
BlackJack

@bluelagoon: Da ist schon wieder ein Text der wohl aus mehreren aneinander gehängten Sätzen, aber ohne Satzzeichen besteht. Den will ich gar nicht erst lesen, auch wenn ich vielleicht mit Mühe ein paar Teile davon verstehe.

Denn selbst wenn man die Frage halbwegs versteht, oder zumindest erahnen kann, dann verstehst Du die Antworten anscheinend nicht, oder Du ignorierst sie willentlich. Das was /me zu dem Quelltextabschnitt gesagt hat, haben andere in der Vergangenheit nämlich auch schon einmal gesagt. Wozu gibt man Dir Hinweise, wenn Du Die sowieso komplett ignorierst.

Wie man den Namen der aktuellsten Sicherungskopie ermittelt, wurde hier schon verraten. Ich habe die Funktionen genannt, und jemand anders hat die sogar schon für Dich in einem passenden Ausdruck zusammen gesetzt. Trotzdem steht da immer noch die auskommentierte ``while``-Schleife in Deinem Quelltext, bei der man sich fragt, ob Du überhaupt eine Vorstellung davon hast, wie der Code ausgeführt wird.

Es gibt übrigens nicht *die* Mac-Adresse eines Rechners. Es könnten mehrere Netzwerkkarten verbaut sein, oder auch virtuelle Karten existieren, wenn man zum Beispiel virtuelle Maschinen auf einem Rechner laufen lässt.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

Naja danke frabron für das Codestück hat mir schon weitergeholfen mal sehn ob ichs schaff bis denn.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

Ne, ich hab nun ne viel bessere und einfachere Lösung!
Ich lass den Backup-Pfad Verzeichnis+Namen in eine Text-Datei schreiben, lese die Datei aus und übergib es dem Subprocess.
Warum schwer machen, wenns doch viel einfacher geht.
Vielen Dank für die Hilfe.
Antworten