2016-07-12 30 views
0

ソースコード内の複数の行にまたがるバイト文字列を解析する必要があります。この複数の行にまたがるバイト列

self.file.write(b'#compdef %s\n\n' 
        '_arguments -s -A "-*" \\\n' % (self.cmdName,)) 

と同じように、この行は\n後、次のように

self.file.write(b'#compdef %s\n\n\'\'_arguments -s -A "-*" \\\n' % (self.cmdName,)) 

お知らせバックスラッシュを次の例外

固定することができ
builtins.SyntaxError: cannot mix bytes and nonbytes literals 

をスローします。この修正は、行ごとに79文字未満のプロジェクトルールに従います。

これを修正するにはどうすればよいですか?

コードは、Python 2に正常に動作しますが、あなたは、複数の文字列リテラルを使用する罰金ですが、彼らは同じタイプである必要がPythonの3

答えて

4

に失敗しました。あなたは二行目にb接頭辞が欠落しています

self.file.write(b'#compdef %s\n\n' 
       b'_arguments -s -A "-*" \\\n' % (self.cmdName,)) 

をPythonのパーサは1つの長いbytes文字列オブジェクトにこれらをマージするのと同じタイプの文字列リテラルを使用した場合のみ。

bの接頭辞はno-opであるため、Python 2で動作しました。 b'..'および'..'は、同じタイプのオブジェクトを生成します。 bという接頭辞はPython 2にのみ存在し、Python 2と3の両方のコードを同じコードベース(polyglot)に書くのを容易にします。

+0

ありがとうございました。私の間違いを理解していない – abhi

関連する問題