首页 > 解决方案 > Python json.decoder.JSONDecodeError:期望值:第 1 行第 1 列(字符 0),路径名中有空格

问题描述

我正在通过 Windows 命令行使用 Python 3 脚本将文件上传到 REST API。文件名是传递给脚本的参数。除非路径名中有空格,否则一切正常。即c:\temp\myFolder\1.jpg有效,但c:\temp\my Folder\1.jpg引发错误:

raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

直到出现错误的代码如下:

def upload_photo(filename):
    f = open(filename, "rb")
    data = f.read()
    data_md5 = hashlib.md5(data).hexdigest()
    f.close()
    r = requests.put('https://upload.mysite.com/{}'.format(filename), data=data)
    response = json.loads(r.text)

我不知道如何解决它。谢谢您的帮助。

--编辑-- 完整回溯

c:\>python test.py "c:/temp/my folder/1.jpg" 

Traceback (most recent call last):

File "test.py", line 144, in <module>
print(test(sys.argv[1]))
File "test.py", line 132, in upload_photo
response = json.loads(r.text)
File "C:\Users\Default\AppData\Local\Programs\Python\Python37-32\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\Default\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\Default\Default\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

标签: pythonpython-3.x

解决方案


您需要正确编码链接;转义无效字符。你可以用urllib.

>>> import urllib
>>> filename = urllib.parse.quote('c:\temp\my Folder\1.jpg')
>>> 'https://upload.mysite.com/' + filename
'https://upload.mysite.com/c%3A%09emp%5Cmy%20Folder%01.jpg'

推荐阅读