2016-10-26 9 views
0

forループ内の行をインデントしてpep8と互換性を持たせるにはどうすればよいですか?pep8との互換性のためにこの行をインデントする方法

for ii in range(len(file_time)): 
    file_time[ii] = datetime.strptime(str(file_date[ii]) + " " + str(file_time[ii]),'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0) 

私はpep8のドキュメントが提供するオプションの2試してみた:

# Aligned with opening delimiter. 
foo = long_function_name(var_one, var_two, 
         var_three, var_four) 

# Hanging indents should add a level. 
foo = long_function_name(
    var_one, var_two, 
    var_three, var_four) 

を私はまだ同じエラーを取得:

script.py:36:9:E122 continuation line missing indentation or outdented 
+1

*あなたはどういう意味ですか*彼らは動作しません*?ぶら下げのインデントは私がここで使うものです。 –

+0

flake8のようなツールを使って確認していますか? –

+0

私は、まだインデントエラーが発生することを意味します。 – paulzaba

答えて

3

ぶら下げインデントがうまく動作するはずです:

for ii in range(len(file_time)): 
    file_time[ii] = datetime.strptime(
     str(file_date[ii]) + " " + str(file_time[ii]), 
     '%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0) 

Y

def as_dt(datestr, timestr, fmt='%Y/%m/%d %H:%M:%S.%f'): 
    dt = datetime.strptime('{} {}'.format(fd, ft), fmt) 
    return dt.replace(microsecond=0) 

file_time = [as_dt(fd, ft) for fd, ft in zip(file_date, file_time)] 
+0

ありがとう!それはあなたが言ったように働いた – paulzaba

2
:あなたはあまりにも機能への変換を抽出することができます

file_time = [ 
    datetime.strptime('{} {}'.format(fd, ft) 
         '%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0) 
    for fd, ft in zip(file_date, file_time)] 

:OUは(すでに確かに、文字列を持っている)str()変換を使用して回避し、zip()とリストの内包表記を使用して、この上で改善することができます

多分答えはそれらのどちらでもない - それが許されているという理由だけで、それが最良の方法であるとは限りません。 pep8の目的は、保守性と可読性を向上させることです。それをpep8に準拠させるために、もっと読みやすく言えば、複数の行に分割する必要があります。

TIME_FORMAT = "%Y/%m/%d %H:%M:%S.%f" 

for ii in range(len(file_time)): 
    date_time = "{} {}".format(file_date[ii], file_time[ii]) 
    file_time[ii] = datetime.strptime(date_time, TIME_FORMAT) 
    file_time[ii] = file_time[ii].replace(microsecond=0) 

pep8に列制限がある理由の1つは、コードを分かりやすくするためです。できるだけ読みやすくするために、コードを1行に1つのアクションにしてください。

+0

ありがとう!私はまだ "テストコード"を実行していますが、あなたのメソッドがうまくいくので、私は最終的なスクリプトでそれを使用します。 – paulzaba

0

Pythonで一般的なルールは、彼らがなぜこの...

for ii in range(10): 
    foo = 1+ 
      2+ 
      3 

ある括弧で囲まれている場合の式は改行を含めることができるということです...でSyntaxError、この一方で

が生成されます。 ..

for ii in range(10): 
    foo = (1+ 
      2+ 
      3) 

...はありません。

また、インデントエラーが表示されているので、一貫して識別のためにタブまたはスペースを使用していることを確認してください。

+0

'E122'は構文エラーまたはインデントエラーではありません。 * linting *エラーです。*スタイルガイド*に違反しています。構文規則(インデントのためにタブとスペースを混在させることもあります)ではなく、違反しています。 –

+0

コードを自分で試してみてください。最初の例では、Python 2.7.9とPython 3.4.2の両方で「SyntaxError:invalid syntax」例外が生成されますが、もう一方はそうではありません。 これはまた、lintingエラー/ /それが無効な構文であるために起こります。 – iCart

+0

私はこの質問のコードについて話していますが、これは構文エラーになっていません。 OPは、行間でその式を壊そうとする試みを分かち合いませんでしたが、リンターのエラーを共有しました: 'script.py:36:9:E122継続行にインデントがないか、または外れています。 ' –

関連する問題