2016-03-26 20 views
-3

Bu yüzden bir satırın neden dosya oluşturduğunu ve herhangi bir hatayı yazdırabilmem için bir programım var. Ben girdi almak Yani eğer böyle görünüyor:Python - yazdırma hataları

line 1 2x 3 4 
line 1 2 x3 4 
lixe 251 2 3 4 5 
line 1 2 3 4 
line 251 2 3 4 

Sonra çıkış gibi görünmelidir:

except Exception as e: 
    for line in lines_file: 
     print >> sys.stderr, 'Error in line ' + str(line_number) + ":" 
     print >> sys.stderr, " " * 4 + line, 
     print >> sys.stderr, " " * (offset + 4) + "^" 
sys.exit(1) 

Ama bunun için: Yani burada

Error in line 1: 
    line 1 2x 3 4 
     ^
Error in line 2: 
    line 1 2 x3 4 
      ^
Error in line 3: 
    lixe 251 2 3 4 5 
    ^
Error in line 5: 
    line 251 2 3 4 
     ^
Error in line 6: 
    line 1 2 3 4 5 
       ^

ben hata kontrolü için ne var kod, çıktı şu şekilde görünür:

Error in line 1: 
    line 1 2 x3 4 
      ^
Error in line 1: 
    lixe 251 2 3 4 5 
      ^
Error in line 1: 
    line 1 2 3 4 
      ^
Error in line 1: 
    line 251 2 3 4 
      ^
Error in line 1: 
    line 1 2 3 4 5 
      ^
Error in line 1: 
    line 1 2 3 4 x5 
      ^

Ve sadece bir satırı gösterir. Peki tüm satırları nasıl yazdırabilirim? Burada deneyin Bock ile benim kod: bu sorunu çözer, ancak kod bakarken iki şey dışarı çıkarsa, ile girintili değil

(1) except blok ...

for line in lines_file: 
    line_number = 1 
    #get offset up to start of coordinates 
    start = re.compile('\s*line\s*') 
    m = start.match(line) 
    offset = m.end() 

    try: 
     for i in range(4): 
      xy = re.compile('\s*([-]?[0-9]{1,3})\s*') 

      if xy.match(line,offset): 
       m = xy.match(line,offset) 
      else: 
       raise Exception 

      coordinate = m.group(1) 

      if int(coordinate) > 250 or int(coordinate) < -250: 
       raise Exception 

      offset = m.end() 

     end = re.compile('\s*$') 
     if not end.match(line,offset): 
      raise Exception 

    except Exception as e: 
     for line in lines_file: 
      print >> sys.stderr, 'Error in line ' + str(line_number) + ":" 
      print >> sys.stderr, " " * 4 + line, 
      print >> sys.stderr, " " * (offset + 4) + "^" 
    sys.exit(1) 

    line_number += 1 
    offset = 0 

    p = re.compile('line\s*([-]?[0-9]{1,3})\s*([-]?[0-9]{1,3})\s*([-]?[0-9]{1,3})\s*([-]?[0-9]{1,3})') 
    m = p.match(line) 
    x0 = int(m.group(1)) 
    y0 = int(m.group(2)) 
    x1 = int(m.group(3)) 
    y1 = int(m.group(4)) 

    print str(x0), str(y0), str(x1), str(y1) 
+0

Her şeyi basmak için bir döngü yazmanız gerekiyor – ABC

+0

ne tür bir döngü. "X in doğrultusunda" gittiğiniz her döngü için mi? – Chase

+0

Tamam Programımı daha fazla göstermek için kodumu güncelledim. – Chase

cevap

0

emin değil try bloğu.

(2) Sonuç olarak, line_number ve offset değişkenleri hiçbir zaman güncelleştirilmiyor gibi görünmektedir. Eğer try düzeyinde except blok koyarsanız

ardından except altında kod istisna bulmak her zaman çalıştırılır olacağını ve bunu içinde ikinci for line ... döngü eklemek gerek olmazdı.

+0

Gerçekte, try bloğuyla doğru bir şekilde girintiydi ancak kodu buraya yapıştırdığımda otomatik olarak biçimlendirildiğini tahmin ediyorum. – Chase

+0

Görüyorum --- bunu düzeltdiğiniz için teşekkürler. Bir soru: Bir istisna gördüğünüzde neden satırlar arasında dolaşmanız gerekiyor? Yakalandıktan sonra, sadece bir satır basmalı. –

İlgili konular