我遇到了一個奇怪的問題,這個字符串比較似乎源於我使用argparse模塊從命令行獲取值。基本上,我們的目標是採取了一些服務器,並從那裏執行一些動作的名稱...Python-比較使用argparse從命令行得到的字符串的問題
./this_script.py -p 3 -s serverA
相關號碼選項工作得很好,但由於某些原因字符串相關的選項未通過我的錯誤檢查。
相關代碼如下:
parser.add_argument("-s", "--server", help="the server on which to act, either serverA or serverB")
,然後將錯誤檢查(目前調試
if args.server:
print "server given"
print args.server
if args.server is "serverA":
print "server is " + args.server
elif args.server is "serverB":
print "server is " + args.server
else:
sys.stderr.write("error, invalid server given\n")
sys.exit()
所以,當我調用腳本,並通過它的服務器參數總是轉到錯誤條件:
~> ./this_script.py -s serverA
server given
serverA
error, invalid server serverA given
我相當有信心,這個問題來了f rom args.server,就好像我硬編碼的服務器名稱,那麼它的工作沒有問題。
在此先感謝您的幫助!
http://stackoverflow.com/questions/2988017/string-comparison-in-python-is-vs – RyPeck
看看''-s serverA'.split()[ - 1]是'serverA'。如果字符串來自不同的來源,它們可能與'=='匹配,但不能與'is'匹配。 – hpaulj