TypeError при запуске блокнота Cell Types из AllenSDK

Я запускаю первые строки блокнота типов ячеек:

sweep_number = 30
sweep_data = data_set.get_sweep(sweep_number)

И я получаю эту ошибку:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-1ff88b13fc24> in <module>()
      4 
      5 sweep_number = 30
----> 6 sweep_data = data_set.get_sweep(sweep_number)
      7 

C:\ProgramData\Anaconda3\lib\site-packages\allensdk\core\nwb_data_set.py in get_sweep(self, sweep_number)
    112                 unit = stimulus_dataset.attrs["unit"]
    113                 unit_str = None
--> 114                 if unit.startswith('A'):
    115                     unit_str = "Amps"
    116                 elif unit.startswith('V'):

TypeError: startswith first arg must be bytes or a tuple of bytes, not str

person SaMa    schedule 04.03.2018    source источник
comment
Добро пожаловать в СО. Я добавил ссылку на блокнот к вашему вопросу и добавил тег python, так как это может быть проблема с python, а не с allensdk.   -  person m00am    schedule 04.03.2018
comment
Ответ от @ m00am правильный. Эта несовместимость py2/py3 была устранена в главной ветке allensdk пару недель назад: github.com/ AllenInstitute/AllenSDK/issues/128. Исправление будет включено в следующую точечную версию.   -  person davidf    schedule 04.03.2018
comment
@davidf спасибо. могу ли я клонировать обновленный репозиторий в папку, созданную при установке через conda (т. е. ~\Anaconda3\Lib\site-packages\allensdk)? или это испортит установку? что вы посоветуете, если я хочу получить обновление репо, а не ждать следующего выпуска точки?   -  person SaMa    schedule 05.03.2018
comment
@sMa Вам следует удалить текущую сборку: pip uninstall allensdk Затем установите ее с GitHub: $ git clone https://github.com/AllenInstitute/AllenSDK.git и: $ pip install AllenSDK/ Извините, возникли проблемы с форматированием.   -  person davidf    schedule 06.03.2018


Ответы (1)


Ошибка, которую вы видите, вызвана тем фактом, что переменная unit является байтовым литералом, а allensdk пытается вызвать endswith, используя в ней строку. Это не сработает, но это не ваша вина. Это распространенная ошибка при переходе с Python 2 на Python 3 (который ввел тип bytes; подробнее см. здесь ). Я предполагаю, что вы используете Python 3, и это вызывает ошибку, поскольку allensdk здесь не может работать с байтами.

Чтобы обойти это, вам нужно либо установить Python 2, поскольку вы используете conda, либо создать среду, использующую Python 2. Это можно сделать следующим образом:

> conda create -n py2allen python=2.7
> activate py2allen
(py2allen)> pip install allensdk
(py2allen)> jupyter notebook

Дополнительную информацию можно найти здесь. Если какие-то из требований не найдены, можно попробовать установить их вручную.

person m00am    schedule 04.03.2018
comment
Спасибо за Ваш ответ. Я решил проблему, добавив в скрипт строку для изменения байта на строку: unit = unit.astype(str). Теперь я понимаю, что создание среды с помощью python 2 — лучшее решение. - person SaMa; 05.03.2018