警报代码有问题,需要用户输入和后台计时器。计时器工作,但不会停止程序

Problem with alarm code, need user input and timer in background. Timer works, but doesn't stop program

我正在为一个警报系统编写代码,该系统运行预定义的时间并允许用户最多输入代码 3 次。如果代码在 3 次内没有正确输入,我有一个按定义工作的打印语句(最终会附加更多代码),问题是我需要超时来类似地执行一些代码。如,如果超时则也执行此操作,(基本上转到输入失败转到的同一行代码)

TIMEOUT = 7 # number of seconds your want for timeout
keycode ="0000";
count = 3

def interrupted(signum, frame):
    "called when read times out"
    print ('Input timeout!!  Contacting Owner!')
signal.signal(signal.SIGALRM, interrupted)


def input():    
 try:      
  count = 3
  for i in range(3,0,-1):

   userIn= raw_input("Enter the security code to disable the alarm 
system\n");
   if userIn != keycode :
             count = count-1;
             print ("Incorrect Password...Tries Remaining", count);



   else:
             print("Password accepted, security system offline");
             #BRANCHING CODE GOES HERE
             break

  if count == 0:
           print("Contacting Owner!");

           #BRANCHING CODE GOES HERE


 except:
     return


# set alarm
signal.alarm(TIMEOUT)
s = input()
# disable the alarm after success
signal.alarm(0)

超时后,消息打印输入超时!!联系所有者!,但用户仍然可以输入密码。这显然不是一个很好的报警系统!理想情况下,我可以在 "if count == 0 or TIMEOUT: True" 之类的地方创建一个 or 语句。

出于某种原因,将这一点代码添加到定义部分解决了问题

我不知道为什么,我也不知道怎么做,但是去掉 return0 上的 0 或将它移动 space 会破坏代码功能。如果有人能解释为什么那会很棒。

a = 1 ;
def interrupted(signum, frame):

     a = 0;
     "called when read times out"
     print ('Input timeout!!  Contacting Owner!');
     if a == 0:
        return0
signal.signal(signal.SIGALRM, interrupted)