2017-06-13 2 views
0

forステートメントにexecステートメントを使用すると、エラーが発生します。 なぜ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** 

しかし、上記のコードでは、あなたはそれは、変数aws_nを処理手動exec文を削除した場合何の問題もなく実行されます。

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

Pythonでeval、exec、コンパイルの違いは何ですか?(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

関連する問題