2017-05-06 11 views
0

、このエラーを持っていないAttributeError: 'str' object has no attribute 'decode'はAttributeErrorは「strの」オブジェクトには、属性「復号」のLatin-1、私はそれを投げている、私は、コードを実行しようとすると、私のユニットテストスクリプト用のHTMLレポートを作成しようとしています

以下は、エラーが表示されているコードの一部である: -

if isinstance(o,str): 
    # TODO: some problem with 'string_escape': it escape \n and mess up formating 
    # uo = unicode(o.encode('string_escape')) 
    uo = o.decode('latin-1') 
else: 
    uo = o 
if isinstance(e,str): 
    # TODO: some problem with 'string_escape': it escape \n and mess up formating 
    # ue = unicode(e.encode('string_escape')) 
    ue = e.decode('latin-1') 
else: 
    ue = e 

script = self.REPORT_TEST_OUTPUT_TMPL % dict(
    id = tid, 
    output = saxutils.escape(uo+ue), 
) 

上記のコードはHTMLTestRunner.pyファイルからのものです。この問題のデバッグにお役立てください。

+0

正しい方法はディーンは、それが「バイト」変更した後、私はライン 」self.stream.write(output.encode( 'UTF8のいずれかで、エラーが直面しています私を助けるため –

答えて

2

私は(なぜならあなたの質問内のタグの)あなたがのpython3を使用していると仮定

のpython3でunicodeタイプはもはやありません、それは単にstrある - strユニコードをデコード既にあるテキストタイプ、です、したがって、strの方法はもはやdecodeではありません。

文字列を扱うため、str戻りbytesを-ing bytesリターンstr、およびencodeを-ing decode方法(decodeを持ってbytesタイプがあり

だから今から上の - 。代わりにdecode際に使用したのタイプは、タイプがbytesである場合にのみ、decodeを使用し、strで次のようになりますあなたのコードを意味

:。

if isinstance(o,bytes): 
    uo = o.decode('latin-1') 
else: 
    uo = o 
if isinstance(e,bytes): 
    ue = e.decode('latin-1') 
else: 
    ue = e 

script = self.REPORT_TEST_OUTPUT_TMPL % dict(
    id = tid, 
    output = saxutils.escape(uo+ue), 
) 
+0

おかげでエンコードしませデコードあります')) "、それは、" TypeError:write()引数はバイトではなく、strでなければなりません "このエラーを修正する方法を教えてください – Santosh

+0

@Santosh - どの行ですか?おそらく、このコードブロックの後に、レポートをファイルに書き込むときに起こります。 (それは 'wの代わりに' wb'で蒸気が開くことを期待しています) –

+0

ディーンありがとう、それは今働いています.. :) – Santosh