2017-06-13 70 views
0

如果我使用exec聲明爲for聲明,就會出現錯誤。當我在Python中使用exec語句時,爲什麼會出現這個「錯誤」?

我的代碼:

exec 'for i in A_'+aws_n+'_DATI[:]:' 
exec ' a_'+aws_n+'_tt += {datetime.datetime.strptime(A_'+aws_n+'_DATI[n], "%Y%m%d%H%M")}' 
exec ' n += 1' 

結果:

**Traceback (most recent call last): 
    File "aws_merge.py", line 140, in <module> 
    exec 'for i in A_'+aws_n+'_DATI[:]:' 
    File "<string>", line 1 
    for i in A_156_DATI[:]: 
         ^
SyntaxError: unexpected EOF while parsing** 

然而,在上面的代碼,如果您刪除exec聲明和手動處理變量aws_n,它將運行沒有任何問題。

for i in A_156_DATI[:]: 
    print n 
    n += 1 

爲什麼沒有運行?

+0

有幾乎從來沒有一個很好的理由使用'exec'。使用它來動態創建變量名稱,比如你的'A_156_DATI',是_definitely **不是** _的一個很好的理由。但是如果你想了解更多關於'exec'(和'eval')的信息,請看[這個優秀的答案](https://stackoverflow.com/a/29456463/4014959)。 –

+0

的可能的複製[什麼是EVAL,EXEC之間的差異,在Python編譯?(https://stackoverflow.com/questions/2220699/whats-the-difference-between-eval-exec-and-compile-in- python) – DyZ

回答

2

首先,千萬不要使用exec()。這完全沒有必要,並且dangerous。其次,exec()執行完整的聲明。 for i in A_156_DATI[:]:不是一個完整的語句,而是循環語句的一部分。如果你真的想要做一個愚蠢的事情,把循環中的所有行在一起:

exec 'for i in A_'+aws_n+'_DATI[:]: a_'+aws_n+'_tt += ...; n += 1' 

供您參考,[:]你的情況是沒有必要的。

+0

哦〜謝謝^^ – GoodLuckSKY

相關問題