我知道使用 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