2012-02-24 62 views
1

我有以下代碼:的Python 3:轉換一個元組作爲字符串

var_one = var_two[var_three-1] 
var_one = "string_one" + var_1 

,我需要做以下它:

var_four = 'string_two', var_one 

然而,這將返回以下錯誤:

TypeError: Can't convert 'tuple' object to str implicity 

我已經試過的東西,如str(var_one)和使用strip但這些並沒有工作。 我能做些什麼來實現我所需要的結果?

編輯 - 在這裏是什麼變量包含:

var_one:新變量

var_two:元組

var_three:整數

var_four:新

EDIT2:

程序中的行t帽子使得錯誤是:os.system(var_four)

+0

我們假設'var_one'是一個元組嗎?你能給我們一個你的代碼的真實例子嗎?此鏈接中的信息是否有幫助? http://stackoverflow.com/questions/3886669/tuple-to-string – birryree 2012-02-24 19:24:13

+1

嗯......這些變量是什麼? – Amber 2012-02-24 19:24:24

+0

增加了變量的問題。 – 2012-02-24 19:28:06

回答

2

你的代碼看起來不錯。

嘗試在程序中運行import pdb; pdb.set_trace()以查看是否可以找到觸發錯誤的行。

編輯:你要使用''.join(var_four)var_four轉換爲字符串將它添加到什麼是你想使用它之前。請注意,這實際上會創建一個新的字符串,並且不會覆蓋var_four。請參閱Python 3 string.join() equivalent?

此外,您應該使用subprocess模塊而不是os.system。請參閱Python 3.x documentation

+0

更新的問題與行導致錯誤 – 2012-02-24 19:35:26

3
one_big_string = ''.join(tuple) 
print one_big_string 
+0

縮進代碼四個空格將它放在一個塊中,而不是使用內聯反引號。 – katrielalex 2012-02-24 19:26:58

+1

@katrielalex - 你不能告訴我如何生活! ;) – prelic 2012-02-24 19:29:15

3

你寫了什麼是好的:

>>> x = 1 
>>> y = 1, x 
>>> 

的問題是,地方其他在你的代碼,你使用var_four作爲一個字符串,它應該是一個元組。

順便說一句,我認爲這是更好的繞括號這樣的圓括號;否則我傾向於認爲它們正在用於元組拆包。


編輯:有各種各樣的方式來加入和格式化字符串 - Python是擅長的。在一定程度上,減少一般性的順序:

"{first_thing} {second_thing}".format(first_thing=var_one, second_thing=var_two) 

"{0} {1}".format(var_one, var_two) 

var_one + var_two 
+0

我需要var_four是一個字符串,這是我的問題。 – 2012-02-24 19:27:48

+0

用導致錯誤的行更新了問題。 – 2012-02-24 19:35:44

+1

@EdenCrow:這不是一個字符串。你__defined__它不是一個字符串。這是一個元組。您可以通過多種方式將其轉換爲字符串,具體取決於您希望如何轉換。 – katrielalex 2012-02-24 19:36:13

0

os.system預計這將將在shell中執行字符串,但你給它一個元組來代替。

想象一下,我們想要運行命令rm -rf /home/mike。你可能會做這樣的事情

binary_and_option = 'rm -rf' 
directory = '/home/mike' 

command = binary_and_option, directory # This is the tuple 
             # ('rm -rf', '/home/mike') 
             # it is NOT the string 
             #  'rm -rf /home/mike' 

os.system(command) # this clearly won't work, since it's just 
        # os.system(('rm -rf', '/home/mike')) 

你想要做的,而不是什麼

command = "%d %d" % (binary_and_option, directory) 

組裝的字符串。你可能想用逗號將str-ed對象與中間的空格組合在一起,但這隻適用於print;一般來說,並不是字符串的工作方式。


等待,還有更多!從來沒有想要使用os.system,特別是當你要建立命令。它調用shell(它引入了不安全的安全風險和其他處罰)並且具有不靈活的API。相反,請使用subprocess模塊。

import subprocess 

binary_and_option = ['rm', '-rf'] 
directory = '/home/mike' 

command = binary_and_option + [directory] 

subprocess.call(command)