Kann nicht verknüpfen 'str' und 'file' Objekte: Python-Fehler

ich habe

Folgendes Stück Code:

for src_filename, src_code in src_dict.iteritems(): try: set.dependencies = subprocess.check_output('unifdef -s /home/c/maindir/folder/' +src_filename, shell=True) except subprocess.CalledProcessError, e: print "code is bad" +set.property set.bad = 1 raise set.dependencies = list(set(set.dependencies.splitlines())) 

Ich wollte den Pfad un-hardcode, also schrieb ich folgendes Stück Code:

 filepath = os.path.join(maindirpath, "folder/") 

Maindir ist ein Argument hier: / home / c / maindir

  path = open(filepath) set.dependencies = subprocess.check_output("unifdef" '-s' path +src_filename, shell=True) 

Es wirft folgende Fehler:

 TypeError: cannot concatenate 'str' and 'file' objects 

Ich bin neu zu python Kann jemand helfen, wo ich mich irre?

3 Solutions collect form web for “Kann nicht verknüpfen 'str' und 'file' Objekte: Python-Fehler”

 for src_file, src_code in src_dict.iteritems(): # assuming, here, that you want to honor the handle's path if already given filename = src_file.name if not '/' in filename: filename = os.path.join(filepath, filename) try: set.dependencies = subprocess.check_output(['unifdef', '-s', filename]) except subprocess.CalledProcessError: pass # etc. 

Übrigens ist set ein schlechter Variablenname, da set auch ein Python-Datentyp ist; Sie machen den Datentyp unbrauchbar in Ihrem Code, indem Sie ihn mit einer gleichnamigen Variablen beschatten. Mach das nicht!

Ich glaube ich verstehe, hier ist was ich versuchen würde:

 import os D = os.getcwd() # returns a string newD = (D + '/folder/') # concatenates the two strings together 

Ich benutze dies die ganze Zeit, wenn os.getcwd () (bekommen aktuelle Arbeitsverzeichnis) ist nicht genau das, was Sie suchen, gibt es ähnliche Optionen unter dem os-Modul, das auch eine Zeichenfolge zurückgeben wird. Da bin ich sicher, dass Sie wissen, die Eingabe von Hilfe (os) in IDLE sollte Ihnen alle Optionen zeigen.

Sie versuchen zu verketten 'unifdef -s /home/c/maindir/folder/' mit src_filename Die erste ist eine Zeichenfolge, also die zweite ist wahrscheinlich ein Datei-Objekt.

Wie pro Ihre bearbeitete Version, benötigen Sie wahrscheinlich

 bytestr = subprocess.check_output( [ 'unifdef', '-s', filepath + os.path.basename(src_filename.name) ] ) 

Anstatt von

 set.dependencies = subprocess.check_output("unifdef" '-s' path +src_filename, shell=True) 

( subprocess.check_output dich daran, dass subprocess.check_output einen Byte-String zurückgibt ). Dann ordne bytestr zu, was du brauchst

Sie können sogar wollen

 try : bytestr = subprocess.check_output( [ 'unifdef', '-s', filepath + os.path.basename(src_filename.name) ], stderr=subprocess.STDOUT ) except subprocess.CalledProcessError : ... 

Dies kann funktionieren, obwohl es ziemlich rudimentär ist, und Sie haben wahrscheinlich viel bessere Optionen mit dem Rest Ihres Codes bearbeitbar (was wir nicht wissen).

Siehe Wie benutzt man subprocess.check_output () in Python?

Python ist die beste Programmiersprache der Welt.