2016-10-08 3 views
1

Ich habe das zu lange beobachtet und ich glaube, ich habe etwas Dummes verpasst. Schreiben eines Skripts, um Informationen in eine Datei zu schreiben. Alle Variablen sind Zeichenfolgen, die von einer anderen Funktion zum Schreiben einer Datei übergeben werden.Python-Fehler TypeError: nicht alle Argumente während der Formatierung von Strings konvertiert

Hier ist mein Code:

53 def makeMainTF(): 
54   NameTag,mcGroupTag,mcIPTag = makeNameMCTag() 
55   yourName = getAccessSecretName() 
56   instanceType ="t2.micro" 
57   with open ("vlslabMain.tf","w") as text_file: 
58     text_file.writelines(['provider \"aws\" {\n', 
59          ' ', 
60           'access_key = \"${var.access_key}\"\n', 
61          ' ', 
62           'secret_key = \"${var.secret_key}\"\n', 
63          ' ', 
64           'region  = \"${var.access_key}\"\n', 
65          '}\n\n\n', 
66          'resource \"aws_instance\" \"example\" {\n', 
67           ' ', 
68          'ami = \"${lookup(var.amis, var.region)}\"\n', 
69           ' ', 
70           'instance_type = \"%s\" \n}' % instanceType, 
71           '\n\n\n\n', 
72           'tags {\n', 
73           ' ', 
74           'Name = \"%s\"\n' % NameTag, 
75           ' ', 
76           'Multicast = \"%s,%s\"' % (mcGroupTag,mcIPTag), 
77           ' ', 
78           'Owner = \"%s\"' % yourName, 
79           '\n}']) 

nicht sicher, warum ich diesen Fehler bin immer:

Enter Access Key: asd 
Enter Secret Key: asd 
Enter your name: asd 
Access Key: asd 
Secret Key: asd 
Your full name is: asd 
Traceback (most recent call last): 
    File "terraTFgen.py", line 86, in <module> 
    makeMainTF() 
    File "terraTFgen.py", line 78, in makeMainTF 
    'Owner = \"%s\"' % yourName, 
TypeError: not all arguments converted during string formatting 

Vielleicht zu lang Ich habe es mit, aber ich nicht die Syntax Fehler sehen.

Er schrieb tatsächlich aus

Enter Access Key: asd 
Enter Secret Key: asd 
Enter your name: asd 
Access Key: asd 
Secret Key: asd 
Your full name is: asd 

Aber der Fehler verursacht das Skript nicht auf die tatsächliche Datei zu schreiben.

Danke für die Hilfe! **** bearbeiten ***

Dies ist die Funktion, die ich die Variable yourname

zu erhalten verwendet, um
3 def getAccessSecretName(): 
    4   access_key = raw_input("Enter Access Key: ") 
    5   secret_key = raw_input("Enter Secret Key: ") 
    6   yourName = raw_input("Enter your name: ") 
    7   print "Access Key: %s" % access_key 
    8   print "Secret Key: %s" % secret_key 
    9   print "Your full name is: %s" % yourName 
10   return access_key, secret_key, yourName 
+0

Was ist in 'yourName', scheint wie ein Tupel. – sisanared

+0

Ich aktualisierte die Bearbeitung mit der Funktion, die den yourName aufruft. obwohl ich gerade in was ich dachte, war eine Zeichenfolge "ralph test", aber seltsam genug, was schreibt in die Datei ist: "... Owner =" 1234 4321 ralph test "', die meine Saite, in ein Tupel verwandelt. Habe ich in meinem getAccessSecretName() etwas falsch gemacht? – chowpay

Antwort

1

Linie ersetzen 78 mit dem folgenden und versuchen -

'Owner = \"%s\"' % " ".join(yourName), 

Effektiv IhrName scheint ein Tupel zu sein.
Der obige Code wird es in einen String-Wert konvertieren.

EDIT: - (Antwort auf die letzte Bemerkung des OP)

Blick auf Linie 10 von getAccessSecretName() Funktion -

return access_key, secret_key, yourName 

Es gibt eine Tupel von access_key, secret_key und yourname.

Also, wenn Sie nur yourName auf Ihre Datei geschrieben werden,

(Option 1)

Linie ersetzen 55 in Funktion getAccessSecretName() mit

access_key, secret_key, yourName = getAccessSecretName() 

Auf diese Weise können die drei Werte sind entpackt in verschiedene Variablen,

und ersetzen Zeile 78 durch folgende -

'Owner = \"%s\"' % yourName 

EDIT 2 (Option II)

Wenn Sie in yourName Variable nur interessiert sind, können Sie auch tun, so etwas wie

yourName = getAccessSecretName()[2] 

Linie ersetzen 55 mit der obigen Zeile. Hier kopieren Sie den Wert des Tupels an einer bestimmten Stelle in die Variable yourName und ignorieren andere Werte.

+0

Es wurde der Fehler los, so dass yourName nur eine rohe Eingabe ist. Ich habe das Programm erneut ausgeführt und den Ralph-Test gestartet. in meinem STDOUT zurück es 'Access Key eingeben: 1234 eingeben Secret Key: 4321 Ihr Name: ralph test' Aber wenn ich mir gehen, was in die Datei geschrieben wird, erhalte ich: ' ... Besitzer = "1234 4321 ralph test" ' Könnte es meine Funktion sein, wo ich verwende, um die Rohdaten inkorrekt zu bekommen? (Funktion zur Hauptfrage hinzugefügt) danke eine Tonne BTW – chowpay

+0

Wenn Sie meine Antwort mögen, bitte upvote es. –

+0

Hat nur = D, irgendeine Idee, warum es meine 1. 2 Eingaben nimmt und es in meine Ausgabe gruppiert? – chowpay

Verwandte Themen