あなたの問題は、あなたがに渡しているものだtuple(ignore_code)
を行うときということである。
>>> tuple(ignore_code)
(' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', "'", 'E', '1', '0', '1', "'", ',', "'", 'E', '1', '1', '1', "'", ',', "'", 'E', '1', '1', '2', "'", ',', "'", 'E', '1', '1', '3', "'", ',', "'", 'E', '1', '1', '4', "'", ',', "'", 'E', '1', '1', '5', "'", ',', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', "'", 'E', '1', '1', '6', "'", ',', "'", 'E', '1', '2', '1', "'", ',', "'", 'E', '1', '2', '2', "'", ',', "'", 'E', '1', '2', '3', "'", ',', "'", 'E', '1', '2', '4', "'", ',', "'", 'E', '1', '2', '5', "'", ',', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ')
あなたは基本的には、すでにあなたが何をする必要があるか言ってきました。
はflake8.main.check_file機能する必要があること( 'E101'、 'E111'、 'E112'、 'E113'、 'E114'、 'E115'、 'E116'、 'E121' のキーワードを無視し、あなたはignore_code
はIE、あなたが渡したい反復可能
ignore_code = ('E101','E111','E112','E113','E114','E115','E116','E121','E122','E123','E124','E125')
flake8.main.check_file(fileName, ignore=ignore_code, complexity=-1)
あなたはが本当にが必要な場合にする必要があります
'E122'、 'E123'、 'E124'、 'E125'、)その複数行の文字列から目的の結果を得るために、yoそれをフォーマットする必要があります。 .replace("\n", " ")
を実行すると、そこに改行文字よりも多くの空白文字があり、内側の項目が引用符で囲まれているため、カットしません。さらに、tuple(some_iterable)
は、項目のタプルを繰り返し可能にします。文字列は文字の反復可能ですが、項目が'E101'
などの文字列ではない文字列の繰り返し可能なものが必要です。
あなたが探しているタプルを次のように取得できました。
import ast
the_tuple = tuple([ast.literal_eval(item.strip()) for item in ignore_code.split(",") if item.strip()])
#the_tuple
#('E101', 'E111', 'E112', 'E113', 'E114', 'E115', 'E116', 'E121', 'E122', 'E123', 'E124', 'E125')
そのコードについては詳しく説明し、どのようにそれが複数行の文字列というフォーマット:
ignore_code.split(",")
がアップし、その項目で区切られ、その文字列の部分から構成(および含まない)のリスト、に文字列を分割します,
文字です。 IE ["\n 'E101'", "'E111'",#etc]
これまでのところ、あなたには届きますが、それらの項目にはまだ空白があります。彼らは文字通り'
を含む文字列です - item.strip()
は今、あなたはほとんどそこにいるが、項目はこの"'E101'", "'E111'",
ようになり
など、改行、スペース、タブ、として、文字列から先頭と末尾の空白文字を削除しますキャラクター。あなたが望むどのようにこれらを解釈するには、文字列
'E101'
最後に"'E101'"
を評価するast.literal_eval
を持つ文字列のリテラル評価を行うことができ、原因あなたの文字列の末尾,
に(空の文字列をある項目があります)を削除する必要があります。したがって、条件式if item.split()
が式に追加されます。
私たちは、英語では、私にその項目から構成されast.literal_eval(item.strip())
のitem
がリストignore_code.split(",")
からすべての項目でリストを与える」
ような何かを言ったかもしれない、ジェネレータ式
[ast.literal_eval(item.strip()) for item in ignore_code.split(",") if item.strip()]
にこのアイデアを置きます
item.strip()
の値が空でない文字列である場合に限ります。
引用符を省略して、 'ignore_code.split( '、')'を渡すのはなぜですか?最初に文字列で始めるのではなく、文字通り必要なタプルを作成するだけです**この問題は 'flake8'や構文のバリデーションにはまったく関係ありません。 – jonrsharpe