2016-06-28 9 views
0

Python 3.5または3.4のWindowsでライブラリを動作させるのに問題があります(この問題[1]を参照)。私はなぜそれが失敗しているのかを詳しく見ていきたいと思った。Python 3.5でbytes-likeオブジェクトとstrを理解する助けが必要です

私は問題はこのようになりますいくつかのコードつまるところ、私は理解していないその結果信じる:

import urllib.request 
import sys 
a = 'c:\Python35\Lib\site-packages\weasyprint\css\html5_ua.css' 
b = a.encode(sys.getfilesystemencoding()) ## 'mbcs' on windows 
c = urllib.request.pathname2url(b) 

インタプリタでこれを実行するには与える:

はTypeError:バイト様オブジェクトは、ない 'str' はしかし

を要求され、最後の行に変更します。

c = urllib.request.pathname2url(a) 
を3210

と正常に動作します。 (a)は<クラス 'str'>

私はそれがバイトのようなオブジェクトが欲しいと私に言ってきたので混乱していますが、それは<クラス 'str'>オブジェクトを渡すときだけです。うまくいけば、これは簡単に説明できるものです。コマンドライン・インタプリタ使用

スタックトレース:

Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import urllib.request 
>>> import sys 
>>> a = 'c:\Python35\Lib\site-packages\weasyprint\css\html5_ua.css' 
>>> b = a.encode(sys.getfilesystemencoding()) ## 'mbcs' on windows 
>>> c = urllib.request.pathname2url(b) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python35\lib\nturl2path.py", line 48, in pathname2url 
    if not ':' in p: 
TypeError: a bytes-like object is required, not 'str' 
>>> 

[1]​​

+1

スタックトレースを含む完全なエラーメッセージを表示できますか? – user2357112

答えて

1

urllib.request.pathname2urlは、文字列ではなく、バイトのようなオブジェクトを取ります。あなたが得ているエラーメッセージはurllibが文字列のように使用しようとしたときにbytesオブジェクトから来て、bytesオブジェクトは他のバイトのように渡されたいと思っています。

+0

OK、私はそれを持っていると思います。行48の 'p'はバイトのようなオブジェクトであり、 'p'で見つかる ':'(コロン)はバイトのようなオブジェクトではないという不満があります。もちろん! –

関連する問題