• 认真地记录技术中遇到的坑!

Python 问题记录

Python 悠悠 2年前 (2017-10-12) 1476次浏览 0个评论

Pycharm提示:Expected type ‘optional[bytes]’ got ‘str’ instead

使用split类似函数的时候提示:Expected type ‘optional[bytes]’ got ‘str’ instead

row.split('\t')

并不影响运行,但是如果强迫症的话,可以改用下面的形式:

row.split(b'\t')

python字符串前面加u,r,b的含义

  • u/U:表示unicode字符串,代表是对字符串进行unicode编码
  • r/R:非转义的原始字符串,转义字符不生效,常用于正则表达式
  • b:bytes,python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b
b'\xe2\x82\xac20'.decode('utf-8')  # byte 转 Unicode 字符串
# €20 对应 b'\xe2\x82\xac20'
'€20'.encode('utf-8')   # unicode 字符串转 byte

Python字典读取 KeyError

在Python中,使用下标访问字典元素时,如果不知道是否存在 Key ,使用get代替,而且下标的字符串编码要一致,否则读不到数据。

dict = {'0':0, '1':1}
print(dict['3')   # 报错
print(dict.get('3')  # None
print(dict[0])  # 报错
print(dict.get(b'0')) #None

Python3 字符串类型 str 和字节类型字符串 b”互转

当提示错误:TypeError: must be str, not bytes,或者:TypeError: must be bytes, not str 时,需要对字符串进行转换:

str = 'str test'
bytes = b'byte test'
# str -> bytes
str.encode()
# bytes -> str
bytes.decode()

Python 字符串列表转为数字列表

当从文件中导入数据的时候,读取的是字符串,有时候我们需要把字符串进行分割,分割生存的列表是字符串数组,需要转化为数值数组。

str = '3,4,5,6'
record_list = str.split(',')  # 此时得到的是:['3','4','5','6']

# 使用循环来进行转换
record_list = [int(x) for x in numbers]
# 使用map函数,用于Python2
record_list = map(int, record_list)
# 在Python3中使用map函数得到的是map对象,还需要转为list
record_list = list(map(int, record_list))

# 上面的 int 参数为转换的类型,还可以是float等
record_list = list(map(eval, record_list))

转载请注明出处 Python 问题记录
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址