PyCharm предупреждает о конкатенации строк и байтов, но все является строкой - PullRequest
4 голосов
/ 03 марта 2020

PyCharm предупреждает меня об этом:

days = os.listdir(os.path.join(os.path.dirname(__file__), src))
day = days[0]
mystring = day.split('.')[0] + ';' + str(entering)

ожидаемый тип 'bytes', вместо него получен 'str'

но мне кажется, что все str. В любом случае это работает, но эти предупреждения делают меня подозрительным. Есть подсказки?

РЕДАКТИРОВАТЬ Добавление более подробной информации: Pycharm - версия 2019.3.3 в Linux. Введите int, а sr c - это путь, по которому:

p = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, description="")
p.add_argument('-src', dest='source', action='store', default='results', help='source path')

args = p.parse_args()
src = args.source

1 Ответ

0 голосов
/ 19 апреля 2020

Если вы посмотрите на os.listdir определение 1 , вы можете прочитать раздел:

Если путь имеет тип байтов (прямо или косвенно через интерфейс PathLike), возвращаемые имена файлов также будут иметь тип байтов; во всех других случаях они будут иметь тип str.

Я думаю, что это косвенная причина os.path.join, поскольку он возвращает объект, реализующий интерфейс PathLike. Я думаю, что PyCharm предполагает, что os.path.join будет как-то возвращать байты. Самый простой способ - просто преобразовать путь в str, используя str(os.path.join(os.path.dirname(__file__), src)) (, хотя это уже str )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...