2016-04-14 21 views
0

Her yerde araştırıyorum ve bunun nasıl yapılacağını anlamadım. Temel olarak kaçış düğmesine basarak çağrılan işlevler arasında herhangi bir zamanda beni tekrar menüye() götürecek basit bir CLI kurmaya çalışıyorum. Bu kurullarda yayınlanan birkaç çözümü/varyasyonu denediğimden, bunun benim için ne işe yaradığı konusunda, bunun ne kadar karmaşık olduğundan emin olamadığından emin değilim. Birinin beni doğru yönde gösterip gösteremeyeceğini merak ediyordum. Oldukça memnun olarak!İç içe geçmiş işlevler içinden kaçmak

ana döngü temelde tüm fonksiyonları çağırır ve aşağıdaki gibi görünür:

if __name__=='__main__': 
    while True: 
     command = raw_input("> ") 
     if command.lower() == 'exit': 
      quit() 
      continue 
     elif command.lower() == 'help': 
      menu() 
      continue 
     elif command.lower() == 'show': 
      show() 
      continue 
     elif command.lower() == 'find': 
      finder() 
      continue 
     else: 
      print("Not a valid command.") 

ben döngü sırasında bulucu() fonksiyonu olarak adlandırılır ve aşağıdaki varsa şöyle bir örnek verilebilir:

def finder(): 
    q = raw_input("Search for q: ") 
    for row in open("filename.csv"): 
     if q in row: 
      print row, 

Giriş beni q için soruyorken menü() gibi başka bir işleve götürmek için çıkış tuşunu tetiklemek mümkün mü? İdeal olarak kaçış kodunun, ana döngü içinde zaten var olan her işlevde bir argüman oluşturmak yerine işlevlerin dışında var olmasını isterim. Bunu başarmanın kolay bir yolu olup olmadığını bilmiyorum.

+0

'KeyboardInterrupt' yeterli olur mu? Yani ctrl-c –

+0

Programdan çıkmaya zorlanıncaya kadar çalışıp çalışmadığından emin değilim. Programı tamamen kapatmadan başka bir işleve geri dönmenin bir yolunu arıyorum. Ama bunun için bir yol varsa tüm kulaklarım. – Exempt

cevap

0

gibi finder() için çağrı sarın:

try: 
    finder() 
except KeyboardInterrupt: 
    pass 

sen (bulucu sırasında ctrl-c basarsanız), bu bulucu kırmak ve çağrıldığı noktada devam edecektir.

Ayrıca, koşullarınızdaki tüm continue s gereksizdir ve kaldırılabilir. while-loop, açıkça anlatılmadıkça veya durum değişikliklerinde kesintiye uğramamaktadır.

İlgili konular