2015-12-17 5 views
1

Я застрял в следующем вопросе: Я разработал PsychoPy Experiment в Windows, версия 1.82.01. Он отлично работает.Ошибка: неподдерживаемый тип операндов PsychoPy

Теперь я скопировал тот же эксперимент на MacBook Air под версией 1.83.01.

С тех пор, эксперимент начинается, но через некоторое время, я получаю следующее сообщение об ошибке

#Running: 
/Users/Kataha/Desktop/Experiment/Experiment_FFOV_Kinder3_lastrun.py # 
2015-12-05 15:26:39.876 python[1314:117629] 
ApplePersistenceIgnoreState: Existing state will not be touched. 
New state will be written to /var/folders/c8/ 
qy0wd2ws3r115rg30wxxg6940000gn/T/org.psychopy.PsychoPy2.savedState 
Traceback (most recent call last): 
File 
"/Users/Kataha/Desktop/Experiment/Experiment_FFOV_Kinder3_lastrun.py", 
line 389, in <module> 
if Fix_kreuz.status == STARTED and t >= (0.0 + (SOA-win.monitorFramePeriod*0.75)): 
#most of one frame period left 

TypeError: unsupported operand type(s) for -: 'unicode' and 'numpy.float64' 

Код в строке 389 выглядит следующим образом:

# *Fix_kreuz* updates 
    if t >= 0.0 and Fix_kreuz.status == NOT_STARTED: 
     # keep track of start time/frame for later 
     Fix_kreuz.tStart = t # underestimates by a little under one frame 
     Fix_kreuz.frameNStart = frameN # exact frame index 
     Fix_kreuz.setAutoDraw(True) 
    if Fix_kreuz.status == STARTED and t >= (0.0 + (SOA-win.monitorFramePeriod*0.75)): #most of one frame period left 
     Fix_kreuz.setAutoDraw(False) 

Переменная СОА определяемый в листе пресса: Excel Sheet with variables

Не могу понять, в чем проблема. Я надеюсь, что кто-то может мне помочь. Спасибо!

ответ

1

В вашем файле Excel обратите внимание, что в столбце SOA значения «0.5» выравниваются по левому краю, тогда как значения «3» являются правильными. В Excel ячейки с левым выравниванием указывают, что это текстовые значения, а не числовые. Сравните с первыми двумя столбцами, которые представляют собой весь текст (и все левые значения), и последний столбец, который является числовым (и все правомерно обоснованы).

Вы можете попробовать экспортировать этот файл в .csv, а не в native .xlsx. Если это фактически числовые значения, то этот столбец будет читаться PsychoPy как числовой. Но вы, вероятно, должны определить, что делает Excel, рассматривая эти записи в этом столбце как текст. Не могу сказать из шрифта, но иногда причина для этого заключается в том, чтобы набирать «oh point five», а не «zero point five».

Это согласуется с ответом @ Michiel о том, что значения unicode (то есть текст) загрязняют переменную SOA, которая должна содержать переменные с плавающей запятой. Но это не согласуется с вашим тестом типа, который обнаружил, что значение было float.

+0

Спасибо - изменение форматов в камера excel отлично работала!Я думаю, только некоторые из значений по какой-то причине не были определены как числовые, и когда программа попала в эту строку, она сломалась. Еще раз спасибо. – Sarah

1

Видимо переменная SOA содержит значение Юникода:

... SOA-win.monitorFramePeriod ... 

unsupported operand type(s) for -: 'unicode' and 'numpy.float64' 

Вы не показать, где SOA определен. Можете ли вы показать это, или, возможно, где-нибудь разместить весь проект? Для того, чтобы проверить, какие типы точно есть, вы можете добавить эти строки:

print "SOA=", SOA, typeof(SOA) 
print "monitorFramePeriod=", win.monitorFramePeriod, typeof(SOAwin.monitorFramePeriod) 

перед линией

if Fix_kreuz.status == STARTED ... 

Возможное исправление может быть, но это дикое предположение:

if Fix_kreuz.status == STARTED and t >= (0.0 + (float(SOA)-win.monitorFramePeriod*0.75)): 
+0

Благодарим за быстрый ответ. Вариант SOA определяется на листе превосходного. Он имеет значения 0,5 или 3 (0,5 с или 3 секунды). Я также пробовал 0,5 и 3, но это приводит к той же ошибке. – Sarah

+0

При печати типа (typeof не работает, но введите), я получаю ответ SOA = 0.5 Sarah

+0

Сообщение об ошибке «неподдерживаемый тип операндов для -: 'unicode' и 'numpy .float64 '"предполагает, что во время ошибки« SOA »имела значение unicode вместо float; это может быть связано с тем, что лист Excel содержит значение ячейки, которое выглядит как число, но на самом деле это строка. Не могли бы вы добавить следующую строку перед строкой, в которой используется SOA: 'assert type (SOA) == float,« SOA не является float, а% r »% type (SOA)' –

 Смежные вопросы

  • Нет связанных вопросов^_^