首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:不带编码的字符串参数

TypeError:不带编码的字符串参数
EN

Stack Overflow用户
提问于 2018-08-22 15:03:16
回答 3查看 88.8K关注 0票数 41

我想上传压缩的gzip的Json到谷歌存储。

我有这样的代码:

代码语言:javascript
复制
import datalab.storage as storage
import gzip
path = prefix + '/orders_newline.json.gz'
storage.Bucket('orders').item(path).write_to(gzip.compress(bytes(create_jsonlines(source)),encoding='utf8'), 'application/json')

create_jsonlines(source)是一个返回Json换行符分隔的函数。

运行此代码会产生以下结果:

代码语言:javascript
复制
TypeError: string argument without an encoding

Python docs说格式是:bytes([source[, encoding[, errors]]]),我不确定我是否理解它,因为没有示例说明如何使用它。

我也试过了

代码语言:javascript
复制
bytes([(create_jsonlines(source))[,encoding='utf8']])

这提供了:

代码语言:javascript
复制
SyntaxError: invalid syntax

我正在运行Python 3.5

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-22 15:22:17

您没有正确使用bytes函数。请检查以下内容:

代码语言:javascript
复制
>>> a = "hi"
>>> bytes(a, encoding='utf8')
b'hi'

您可以尝试:

代码语言:javascript
复制
bytes((create_jsonlines(source)), encoding='utf8')

encodingbytes函数的参数,您可以在该函数外部使用它。

票数 71
EN

Stack Overflow用户

发布于 2018-08-22 15:19:46

你可能离答案只有一步之遥了。

有关函数的用法,请参阅bytearray()bytes (您可能需要更改文档的python版本)。

上面写着:

可选的source参数可用于以几种不同的方式初始化数组:

如果它是一个字符串,你还必须给出

  • (和可选的,)参数;
  • 如果它是符合buffer接口的对象,则该对象的只读缓冲区将用于初始化字节数组。
  • 如果它是可迭代的,则它必须是0 <= x< 256范围内的整数的可迭代数组,这些整数用作数组的初始内容。

请注意,方括号表示可以省略这些参数,它不是python语言的数组类型。

所以你应该使用bytes(create_jsonlines(source), encoding='utf8')

票数 6
EN

Stack Overflow用户

发布于 2019-08-07 13:33:33

当您阅读任何python函数文档时,

代码语言:javascript
复制
bytes([source[, encoding[, errors]]])

方括号表示这些参数是可选的。另一个中的多个方括号意味着它们是下一级别的期权参数。例如

代码语言:javascript
复制
bytes([source....

这意味着我们可以将字节调用为byes()本身,因为[source]在这里是可选的

代码语言:javascript
复制
bytes() -> empty bytes object
代码语言:javascript
复制
bytes(22)

这里22是作为源代码传递的

有关字节及其参数的更多详细信息,请阅读本文

https://docs.python.org/3/library/stdtypes.html#bytes

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51961386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档