2012-11-02 84 views
0

下面的代碼是由我與許多的幫助,所以退伍軍人創建:Python的解析錯誤消息功能

代碼需要輸入的數學表達式,並將它分爲符和操作數,供以後使用。我創建了兩個函數,分割的解析函數和錯誤函數。我遇到了錯誤函數的問題,因爲它不會顯示我的錯誤消息,並且我感覺代碼運行時該函數被忽略。如果輸入如下所示的表達式,則應輸出錯誤:3 // 3 + 4等。總共有兩個操作符,或者整個表達式中有兩個以上的操作符,但錯誤消息不打印。我的代碼如下:

def errors(): 

    numExtrapolation,opExtrapolation=parse(expression) 
    if (len(numExtrapolation) == 3) and (len(opExtrapolation) !=2): 
     print("Bad1") 
    if (len(numExtrapolation) ==2) and (len(opExtrapolation) !=1): 
     print("Bad2") 


def parse(expression): 
    operators= set("*/+-") 
    opExtrapolate= [] 
    numExtrapolate= [] 
    buff=[] 
    for i in expression: 
     if i in operators: 
      numExtrapolate.append(''.join(buff)) 
      buff= [] 
      opExtrapolate.append(i) 
      opExtrapolation=opExtrapolate 
     else: 
      buff.append(i) 
    numExtrapolate.append(''.join(buff)) 
    numExtrapolation=numExtrapolate 
    #just some debugging print statements 
    print(numExtrapolation) 
    print("z:", len(opExtrapolation)) 
    return numExtrapolation, opExtrapolation 

    errors() 

任何幫助,將不勝感激。請不要引入比此處代碼更高級的新代碼。我正在尋找解決方案來解決我的問題...不是很大的新代碼段。謝謝。

回答

1

parse()返回後調用errors()函數,因爲它出現在parse()的主體內部。希望這是一個錯字。

對於這個特定的輸入,numExtrapolate附加了一個空緩衝區,因爲在/和/之間沒有操作數。這使得它的長度爲4,並且檢查Bad1失敗。所以把這樣的支票

if buff: 
    numExtrapolate.append(''.join(buff)) 
+0

好的。如何打印(len(numExtrapolate))。你在那裏看到什麼? – Himanshu

+0

你可以加入我的聊天嗎? – SeesSound

+0

雖然它應該是3,但我確實得到了數字4的4 – SeesSound