为什么在使用raw_input时无法捕获KeyboardInterrupt?

5

这是一个测试用例。


try:
    targ = raw_input("Please enter target: ")
except KeyboardInterrupt:
    print "Cancelled"
print targ

当我按下ctrl+c时,我的输出如下所示-
NameError: name 'targ' is not defined

我的意图是输出“已取消”。当我尝试在输入时捕获KeyboardInterrupt时,为什么会发生这种情况?

谢谢!

2个回答

5
在上面的代码中,当出现异常时,targ未定义。您应该仅在未出现异常时打印。
try:
    targ = raw_input("Please enter target: ")
    print targ
except KeyboardInterrupt:
    print "Cancelled"

2
错误发生的原因是,如果出现 KeyboardInterrupt 异常,变量 targ 就不会被初始化。
try:
    targ = raw_input("Please enter target: ")
except KeyboardInterrupt:
    print "Cancelled"

Please enter target: 
Cancelled

>>> targ

Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    targ
NameError: name 'targ' is not defined

当它没有发生时,
try:
    targ = raw_input("Please enter target: ")
except KeyboardInterrupt:
    print "Cancelled"


Please enter target: abc

>>> targ
'abc'

您可以在try语句中打印targ,以确保没有异常抛出时进行打印。请参考以下演示进行操作。
try:
    targ = raw_input("Please enter target: ")
    print targ
except KeyboardInterrupt:
    print "Cancelled"


Please enter target: abc
abc

try:
    targ = raw_input("Please enter target: ")
    print targ
except KeyboardInterrupt:
    print "Cancelled"


Please enter target: 
Cancelled

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接