2016-12-20 66 views
0

我正在編寫一個Python函數,使用用戶提交的憑據向URL發送GET請求,並獲取返回的令牌供以後使用。如果用戶名/密碼組合不正確,代碼將拋出KeyError異常。我瞭解到Try-Else可以打破最內層的循環,在這種情況下應該是while循環。在Python中,如何從Try中正確跳出While循環?

Invalid credentials. Please try again. 

Enter your username: 

如果登錄成功,則代碼應該清除屏幕並返回所獲得的令牌:在我的設計,我當發生異常(意爲無效證書)想要的功能輸出下面的消息。問題是,當這些代碼不在Try中而不在While中時,這些代碼運行良好。現在,這個輸出時登錄成功:

Enter your username: 

顯然,程序不執行,即使發生也不例外else分支。我是Python新手,請幫助我確定導致此錯誤的原因。

編輯:感謝您的意見中的意見。我設置了一些斷點,但斷點顯示即使我在try塊的末尾插入了一箇中斷,程序也會先執行它,然後直接返回到「while True」語句。這似乎是休息沒有成功退出循環。

+1

你不應該使用神奇寶貝的例外(總得趕上它們全部)。 – Moberg

+1

最簡單的就是在try:塊的末尾放置break。 – RemcoGerlich

+0

在嘗試一段代碼中放入中斷。 –

回答

1

爲什麼不添加一個在成功嘗試結束時更改的bool?

# Function for logging in and get a valid token 
def getToken(): 
    gotToken = False 
    while not gotToken: # Loop the cycle of logging in until valid token is received 
     try: 
      varUsername = raw_input("Enter your username: ") 
      varPassword = getpass.getpass("Enter your password: ") 
      reqAuthLogin = 'https://MY_URL?username=' + varUsername + '&password=' + varPassword # Send the login request 
      varToken = json.loads(urllib2.urlopen(reqAuthLogin).read())['Token'] # Attempt to parse the JSON response and read the Token, if possible 
      gotToken = True 
     except: # If credential is invalid and no token returned 
      os.system('cls') 
      print 'Invalid credentials. Please try again. \n' 
    os.system('cls') 
    return varToken # Return the retrieved token at the end of this function 
+0

謝謝!您的解決方案奏效雖然我不知道爲什麼我的ELSE不起作用,但我會用你的方法作爲替換... – xyx0826