2017-03-08 74 views
0

我試圖在執行我得到一個錯誤使用後述的「python腳本」中(「AWS LAMBDA」)來調用一個函數包含該行中的一個 「for循環:嘗試&除了的Python腳本錯誤 - 嘗試,除了內部的for循環 - 語法錯誤

腳本用來創建現有AWS實例

ParseError: bad input on line 48

的AMI 48線說:

43 for instance in instances: 
44  try: 
46   retention_days = [ 
47    int(t.get('Value')) for t in instance['Tags'] 
48    if t['Key'] == 'Retention'][0] 
49   except IndexError: 
50    retention_days = 7 

我嘗試添加「最後:」關閉嘗試:如下

43. for instance in instances: 
44.  try: 
45.   retention_days = [ 
46.    int(t.get('Value')) for t in instance['Tags'] 
47.    if t['Key'] == 'Retention'][0] 
48.    finally: 
49.    retention_days.close() 
50.  except IndexError: 
51.   retention_days = 7 

但我仍得到相同的錯誤,因爲我是新來的蟒蛇,我不知道如何克服這個例外。

完整的腳本可在GitHub-AMI-Creation-Script

回答

0

在你的代碼的finally子句是放錯了地方。它應該是在同一縮進層次tryexcept,例如:

try: 
    <some code> 
except IndexError: 
    <some code> 
finally: 
    <some code> 

finally子句中的代碼將始終無論是否有異常或不執行。這通常用於清理或釋放資源。

+0

@gamaat:謝謝你的指正,讓我嘗試對代碼進行如下更改:**'例如在實例中: 嘗試:如果t ['Key'] =='Retention'] [0] (IndexError: retention_days = 7),則實例['標籤']中的t爲int(t.get('Value')) \t最後: retention_days.close()「** 不知道我用最後千鈞一髮是正確的 – Subash

0

您在try中的代碼相當混亂,它看起來似乎沒有正確讀取。

您正在解析t.get('Value')爲int,但尚未創建t,因爲您在同一行上執行了此操作,而您在實例中['Tags']缺少t':'

我沒有測試過這一點,隨意改變它或與它玩,但,這可能有助於朝着自己的目標:

for instance in instances: 
    try: 
     for t in instance['Tags']: 
      if t['Key'] == 'Retention': 
       retention_days = int(t['Value']) 
    except IndexError: 
     retention_days = 7 

希望這有助於

+0

謝謝回答我的問題,我試着用你給的變化,但其再次拋出一個語法錯誤測試:**」模塊'lambda_function'中的語法錯誤:unindent與任何外部縮進級別不匹配**(lambda_function.py,第48行)' – Subash

+0

如果您直接複製並粘貼了我的代碼,那麼對於每一行我都沒有得到完全相同的縮進所以你可能只需要通過並檢查縮進是否一樣我也一樣。 Python對縮進非常具體,這就是錯誤信息的內容。 – vxstorm

+0

@Subash我在我的代碼段中修復了縮進,現在可以嘗試嗎? – vxstorm