Выключение al oop при запуске программы Python в командной строке - PullRequest
0 голосов
/ 20 января 2020

Я знаю, что использование Ctrl + C может использоваться для выхода из запущенного процесса при использовании командной строки Windows, но когда я пытаюсь это сделать, чтобы вырваться из времени l oop, который запрашивает ввод пользователя это не работает

Вот метод run () для маленькой игры в Блэк Джек, которую я делаю:

def run():
    print('\t==================== Welcome to the Black Jack Casino ====================\n')
    while True:
        try:
            player_chips = int(input('How many chips do you want to buy? '))
            break
        except:
            print('Don\'t muck me about... ')
    cash_out = False
    dealer = Dealer()
    player = Player()
    player.chips = player_chips
    while not cash_out or player.chips >= 0:
        try:
            player_bet = int(input('Place a bet: '))
            if player_bet > player.chips:
                print('You don\'t have the readies mate...')
            else:
                start_game(dealer, player, player_bet)
                try:
                    quit = input('You want to continue? (Y/N) ')
                    if quit.lower() == 'n':
                        cash_out = True
                except:
                    print('Don\'t talk rubbish...')
        except:
            print('Don\'t waste my time...')
            continue
    try:
        play_again = input('Fancy another game? (Y/N)')
        if play_again.lower() == 'y':
            run()
        else:
            print('Next time then sucker...')
            return
    except:
        print('Don\'t talk rubbish...')

При попытке Ctrl + C из некоторого времени l oop, он запрашивает мне «Сделать ставку» и просто печатает «Не трать мое время ...». Как я могу заставить эту работу работать, потому что действительно раздражает продолжать выходить cmd и затем повторно переходить к моим файлам. Спасибо

Ответы [ 2 ]

4 голосов
/ 20 января 2020

Как я могу заставить эту работу работать, потому что действительно раздражает продолжать выходить из cmd, а затем повторно переходить к моим файлам. Спасибо

Не используйте голые except (except оператор без указания типа исключения): в Python Ctrl- C преобразуется в исключение и поднял. Это означает, что except без дополнительной информации будет перехватывать его и выполнять любой код обработки исключений, который вы определили.

В Python вы почти всегда хотите явно поймать Exception, поскольку он включает в себя большинство исключений, но важно исключить KeyboardInterrupt (это то, на что Ctrl- C переводит) и SystemExit (что и вызывает sys.exit()). См. иерархию исключений .

Основным исключением является выполнение очистки, а затем повторное повышение непосредственно, в этом случае пустое исключение является приемлемым (хотя часто ненужным, потому что, если процесс убит, вы обычно не нужно закрывать файлы и т. П.)

Кстати, то же самое применимо, если вам когда-либо понадобится определить собственное исключение: оно должно расширяться Exception, если только оно не является системным. исключение типа, которое обычно не следует перехватывать и возобновлять.

0 голосов
/ 20 января 2020

Блоки Try и Except используются для перехвата сценариев ios, которые являются беспрецедентными или не учитываются разработчиком. Скажем:

  • Вы обращаетесь к файлу, и каким-то образом файл был удален.
  • Вы обращаетесь к базе данных, и соединение было потеряно.
  • Вы потеряли контакт с чем-то и не можете предсказать, как это повлияет на него.

Причина, по которой вы не можете выйти из программы, потому что она уловила ошибку и перешла к блоку кроме, который обрабатывает ее.

Дополнительная информация: https://www.w3schools.com/python/python_try_except.asp

  • В общем, что я сделал в приведенном ниже коде, так это то, что мы говорим ему выйти, если вы даете сигнал прерывания клавиатуры (Ctrl + c), чтобы остановить программу, как показано ниже.

  • Эта концепция называется обработкой сигнала и используется в средах разработки.

  • Вы можете воспользоваться ссылкой ниже на github для исходного кода: https://github.com/SugaanthMohan/Python_Tools/blob/master/SignalHandling/SignalHandling.py

Если хотите Ваш код для остановки только с помощью клавиатуры Прерывание Ctrl + C, используйте код ниже.

def run():
    print('\t==================== Welcome to the Black Jack Casino ====================\n')
    while True:
        try:
            player_chips = int(input('How many chips do you want to buy? '))
            break
        except:
            print('Don\'t muck me about... ')
        except KeyboardInterrupt:
            raise SystemExit

    cash_out = False
    dealer = Dealer()
    player = Player()
    player.chips = player_chips
    while not cash_out or player.chips >= 0:
        try:
            player_bet = int(input('Place a bet: '))
            if player_bet > player.chips:
                print('You don\'t have the readies mate...')
            else:
                start_game(dealer, player, player_bet)
                try:
                    quit = input('You want to continue? (Y/N) ')
                    if quit.lower() == 'n':
                        cash_out = True
                except:
                    print('Don\'t talk rubbish...')
                except KeyboardInterrupt:
                    raise SystemExit
        except:
            print('Don\'t waste my time...')
            continue
        except KeyboardInterrupt:
            raise SystemExit
    try:
        play_again = input('Fancy another game? (Y/N)')
        if play_again.lower() == 'y':
            run()
        else:
            print('Next time then sucker...')
            return
    except:
        print('Don\'t talk rubbish...')
    except KeyboardInterrupt:
        raise SystemExit

...