2016-04-14 4 views
0

Я искал везде и не понял, как это сделать. В основном я пытаюсь настроить простой CLI, где в любой момент времени в вызываемых функциях нажатие кнопки escape вернет меня в меню(). Не уверен, насколько сложно это выполнить, поскольку я попытался несколько решений/вариантов, размещенных на этих досках, ни один из которых не работал для меня. Интересно, может ли кто-нибудь указать мне в правильном направлении. Очень ценим!Экранирование вложенных функций

Основной цикл в основном вызывает все функции и выглядит следующим образом:

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.") 

Примером может быть, если бы я назвал функцию искателя() во время цикла и я следующее:

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

Можно ли вызвать ключ эвакуации, чтобы передать мне другую функцию, такую ​​как menu(), в то время как вход запрашивает у меня q? В идеале я бы хотел, чтобы escape-код существовал вне функций вместо создания аргумента в каждой функции, которая уже существует внутри основного цикла. Я не знаю, есть ли простой способ сделать это.

+0

Достаточно ли «KeyboardInterrupt»? То есть ctrl-c –

+0

Я не уверен, что это сработает, так как он выйдет из программы. Я просто ищу способ вернуться к другой функции, не закрывая программу полностью. Но я все уши, если есть способ сделать это с этим. – Exempt

ответ

0

Оберните вызов finder() как таковой:

try: 
    finder() 
except KeyboardInterrupt: 
    pass 

Если нажать Ctrl-C во время искателем(), это будет вырваться из искателем и продолжить в той точке, с которой она была вызвана.

Кроме того, все continue s в ваших условных обозначениях не являются необходимыми и могут быть удалены. while-loop не будет ломаться, если явно не указано, или это состояние изменяется.

Смежные вопросы