在命令行上运行 Python 程序时脱离循环



我知道使用 Ctrl+C 可以在使用 Windows 命令行时退出正在运行的进程,但是当我尝试这样做以打破要求用户输入的 while 循环时,它不起作用。

这是我正在制作的小型黑杰克游戏的 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 从 while 循环中取出时,它会提示我"下注"并只打印"不要浪费我的时间..."。我怎样才能做到这一点,因为不断退出cmd然后重新导航到我的文件真的很烦人。谢谢

我怎样才能做到这一点,因为继续退出cmd然后重新导航到我的文件真的很烦人。谢谢

不要使用裸except(except未指定异常类型的语句(:在 Python 中,Ctrl-C 被转换为异常并引发。这意味着没有更多信息except捕获它,并执行您定义的任何异常处理代码。

在 Python 中,您几乎总是希望显式捕获Exception因为它包含大多数异常,但重要的是排除了KeyboardInterrupt(这是 Ctrl-C 转换为的(和SystemExit(这是sys.exit()触发器的内容(。请参阅异常层次结构。

主要的例外是执行清理然后直接重新引发,在这种情况下,裸露的例外是可以接受的(尽管通常是不必要的,因为如果进程被杀死,您通常不需要关闭文件等(。

顺便说一下,如果您需要定义自己的异常,这同样适用:它应该扩展Exception,除非它是通常不应捕获和恢复的系统类型异常。

尝试和除了块用于捕获前所未有的场景或开发人员未考虑的场景,说

  • 您正在访问一个文件,但不知何故该文件被删除了。
  • 您正在访问数据库,但连接已丢失。
  • 失去了对某物的联系,你无法预测它将如何影响它。

您无法退出程序的原因是因为它捕获了一个错误并移动到 except 块,这是如何处理它的。

更多信息 : 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

最新更新