【问题标题】:Pycharm expected type 'optional[bytes]' got 'str' insteadPycharm 预期类型 'optional[bytes]' 得到了 'str'
【发布时间】:2017-01-19 17:44:47
【问题描述】:
我正在使用rsplit 来拆分路径名,
rootPath = os.path.abspath(__file__)
rootPath = (rootPath.rsplit('/', 1)[0]).rsplit('/', 1)[0]
但是 Pycharm 会发出警告,
预期类型为optional [bytes],改为str
在python doc 中,它声明使用sep 作为分隔符字符串。
那么如何解决这个问题?
【问题讨论】:
标签:
python
python-3.x
split
pycharm
【解决方案1】:
似乎rootPath 被视为字节对象(可能是一个小错误?)或者警告是针对另一部分的。
一般来说,PyCharm 和错误本质上警告您的是参数必须是 None 或 bytes。这就是 Optional 的意思,Optional[type] 是 None 或 type,在你的情况下是 bytes。
在一个简单的 Python REPL 中,消息略有不同,但要点是相同的:
b'hello/world'.rsplit('/') # error bytes-like object required
相反,您需要提供byte 分隔符:
b'hello/world'.rsplit(b'/')
或None 以使其正常工作。
PyCharm 中存在一个小错误,它在此处错误地报告 rsplit,或者警告是针对您代码的另一部分。
【解决方案2】:
我带着同样的问题来到这里并找到了一个略有不同的解决方案 - 考虑为将来可能遇到相同问题的任何人添加它。
rootPath = os.path.abspath(__file__)
rootPath = str(rootPath.rsplit('/', 1)[0]).rsplit('/', 1)[0]