2017-07-19 34 views
-2
from sys import argv 

script, user_name = argv 
prompt = '> ' 

print ("Hi %s, I'm the %s script.") % (user_name, script) 
print ("I'd like to ask you a few questions.") 
print ("Do you like me %s?") % user_name 
likes = raw_input(prompt) 

print ("Where do you live %s?") % (user_name) 
lives = raw_input(prompt) 

print ("What kind of computer do you have?") 
computer = raw_input(prompt) 

print """ 
Alright, so you said %r about liking me. 
You live in %r. Not sure where that is. 
And you have a %r computer. Nice. 
""" % (likes, lives, computer) 

雖然在PowerShell中運行這個(Python 3中)的代碼我得到類型錯誤,同時運行的argv Python代碼

類型錯誤 '的%不支持的操作數類型(S):' Nonetype」和 '海峽' '

這裏有什麼錯誤?

+0

未來:請同時發佈您所看到的錯誤的完整堆棧跟蹤。否則,我們只需猜測*錯誤發生在哪裏。如果你自己看看,你可能已經看到錯誤出現在'print'調用的行中,所以它與'argv'或其他任何東西都沒有關係。 – poke

+1

這段代碼似乎很破碎。你正在使用python3?然而,不要使用print函數(帶圓括號),並且使用'raw_input'。你確定它不是py2嗎? –

+0

@PaulRooney一旦修復了問題中的錯誤,OP可能會爲'raw_input'使用看到一個'NameError'。 – poke

回答

2
print ("Hi %s, I'm the %s script.") % (user_name, script) 

print是在Python 3的功能,所以這是做一些預期的不同。第一組括號屬於print函數調用,所以你這是什麼:

print("Hi %s, I'm the %s script.") % (user_name, script) 
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
# only that is the argument to the print call 

所以,如果你在不同的語句拆分這件事,它應該是這樣的:

print_result = print("Hi %s, I'm the %s script.") 
format_args = (user_name, script) 

print_result % format_args 

現在,呼叫print()什麼都不返回,即None。所以你基本上是做以下事情:

None % format_args 

而這會導致你所看到的確切的錯誤。

你想要做的,而不是什麼是確保字符串格式化發生了參數傳遞給print調用,就像這樣:

print("Hi %s, I'm the %s script." % (user_name, script)) 

注意,你不需要把一個字符串中的附加括號。因此,最後關閉的print調用只有一個左括號。


正如保羅·魯尼在評論中指出,一旦你有固定的print電話,你可能會遇到一個NameError供您使用的raw_input。在Python 3中不存在raw_input,所以你也需要修復它。另見this question on that topic

+0

感謝好友它完美地工作。 –