2012-11-02 85 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