2011-10-02 30 views
0

我想在搜索要更新的WSUS組時比較兩個字符串。然而,即使它們在視覺上看起來是相同的,並且屬於同一類型,我的比較也失敗了。由於這是IronPython,我沒有在Komodo中可用的調試器(任何人都知道一個用於IP?)在IronPython中比較字符串

無論如何,有人可以發現我做錯了什麼嗎?

#---------------------------------------------------------------------- 
# Search for a matching patch group, and approve them. 
#---------------------------------------------------------------------- 
def WSUSApprove(apprvGrpName): 
    clr.AddReference('Microsoft.UpdateServices.Administration') 
    import Microsoft.UpdateServices.Administration 

    wsus = Microsoft.UpdateServices.Administration.AdminProxy.GetUpdateServer('wsus01',False,8530) 

    parentGroupCollection = wsus.GetComputerTargetGroups() 
    for computerTarget in parentGroupCollection: 
     if computerTarget.Name.ToString() == 'Servers': 
      parent = computerTarget 
      childGroupCollection = parent.GetChildTargetGroups() 
      for computerTarget in childGroupCollection: 
       print type(computerTarget.Name.ToString()) 
       print type(apprvGrpName) 
       if apprvGrpName == computerTarget.Name.ToString(): 
        print 'success', computerTarget.Name.ToString() 
       else: 
        print 'a', computerTarget.Name.ToString() 
        print 'b', apprvGrpName 

#--output that should be equal--# 

<type 'str'> 
<type 'str'> 
a 3 Tuesday 
b 3 Tuesday 
+0

它顯示'\ n在其中之一!謝謝你的幫助。咄。 – EdgeCase

+0

我會將其移至答案。請記住接受你的問題的答案(你沒有對你的前兩個)。 – agf

回答

1

在Python 2.x中,使用repr()可以在視覺上看到兩個字符串是否相同。 print基本上調用str,所以你不能看到不可打印的字符,很難看到空白的差異。

那麼,這樣做:

print repr(computerTarget.Name.ToString()) 
print repr(apprvGrpName) 

找出爲什麼它們是不等價的。

請參閱John Manchin對Python 3.x上的使用的評論,其中repr()不會轉義unicode字符。

+1

在Python 3.x中,使用'ascii()'。 Python 3.x'repr()'不代表具有轉義序列的非ASCII字符,給歧義留下了相當大的空間。 –

+0

並不重要,如果它是一個Python 1.x的問題,不要說「永遠」。 –

0

最有可能的一個字符串有一個尾隨空格字符,如換行符,回車符或空格。

+1

是的,他知道這一點,因爲他在我勸他之後使用了'repr'。請參閱有關問題的評論。 – agf