2016-04-14 41 views
1

我正在为需要搜索数据库(csv)的产品的学校做一个项目。它通过将验证的EAN-8代码与每行的第0列进行匹配,并在for循环中进行扫描。有一个尝试,除了试图匹配代码,然后显示产品,除了它是否找不到它,当它打算打印“PRODUCT NOT FOUND,Try again”时。我尝试了不同的迭代,如果,否则,如果,elif结合尝试,除了但无济于事。请帮忙。Python的行为我不明白

#code is the barcode 
     for row in csv_file: 
      try: 
       if code == row[0]: 
        print("This product is: ", row[1], "\n", "Quantity left in stock: ", row[2], "\n", "Cost: ", row[3], "\n") 
        quant = int(input("How many do you you want?: ")) 
        if quant > int(row[2]): 
         print("We don't have that many, try again") 
         order() 
        else: 
         orderrow = row 
         orderrow[2] = quant 
         orderrow[3] = float(orderrow[3]) * quant 
         totalcost = totalcost + orderrow[3] 
         orderlist.append(orderrow) 


      except: 
       print("ITEM NOT FOUND, TRY AGAIN") 
       order() 
+0

有什么例外,你期待'除了'要赶上? – user2357112

+0

很明显,你没有得到任何异常。我认为你误解了“尝试/除了”实际上做了什么。 –

回答

0

正确的方法是在找到匹配的行时设置变量。循环完成后,检查变量以查看是否找到任何内容,如果没有,则打印该消息。

found = false 
for row in csv_file: 
    if code == row[0]: 
     found = true 
     print("This product is: ", row[1], "\n", "Quantity left in stock: ", row[2], "\n", "Cost: ", row[3], "\n") 
     quant = int(input("How many do you you want?: ")) 
     if quant > int(row[2]): 
      print("We don't have that many, try again") 
      order() 
     else: 
      orderrow = row 
      orderrow[2] = quant 
      orderrow[3] = float(orderrow[3]) * quant 
      totalcost = totalcost + orderrow[3] 
      orderlist.append(orderrow) 
if !found 
    print("ITEM NOT FOUND, TRY AGAIN") 
    order() 
+0

感谢@Barmar这真的帮了大忙! –

5

您需要合适的if-else而不是try-catch。这里没有Exception。如何:

for row in csv_file: 
    if code == row[0]: 
     print("This product is: ", row[1], "\n", "Quantity left in stock: ", row[2], "\n", "Cost: ", row[3], "\n") 
     quant = int(input("How many do you you want?: ")) 
     if quant > int(row[2]): 
      print("We don't have that many, try again") 
      order() 
     else: 
      orderrow = row 
      orderrow[2] = quant 
      orderrow[3] = float(orderrow[3]) * quant 
      totalcost = totalcost + orderrow[3] 
      orderlist.append(orderrow) 
    else: 
     print("ITEM NOT FOUND, TRY AGAIN") 
     order() 
+0

这将为文件中没有匹配代码的每一行打印“ITEM NOT FOUND”。 – Barmar

+0

@Barmar我没有验证OP的逻辑。只需修复不必要的'try-except'并指向'if-else'。看起来这是所有OP需要在这一点:) – th3an0maly

+0

编辑我的评论。谢谢 – th3an0maly