2013-11-08 2 views
3

Я пытаюсь проверить переменную для ее типа в Plone Products.PythonScript. Я попробовал этот код:Проверить тип в Plone PythonScript

if isinstance(var, list): 
    do(sth) 

К сожалению, «списка» и «типа» имеют ограниченный в PythonScript. Я получил эту ошибку:

TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types 

Есть ли возможность проверить мою переменную для ее типа?

+0

Да, я. Эта ссылка объясняет многое: [chu-reims.fr] (https://www.chu-reims.fr/Control_Panel/Products/PythonScripts/Help/PythonScript.py). – tsabsch

ответ

3

Python Script можно использовать специальную функцию same_type(), чтобы обойти ограничения, установленные на типы:

if same_type(var, []): 

где мы используем буквальную пустой список обозначений, а не list самого типа (так как это было переназначено).

+0

Это сработало для меня! Большое спасибо, Martijn! :) – tsabsch

+0

После работы с ним еще несколько дней, я должен аннотировать, что он просто работает с 'if same_type (var, [])', а не с 'if same_type (var, list)'. 'list' по-прежнему ограничен. :) – tsabsch

+0

Правильно, я обновлю; тогда литеральный синтаксис не был переопределен. –

0

Я не думаю, что ваша проблема такая же, как описано.

Эта ошибка, кажется, указывает на то, что вы назначили переменную list чему-то еще (чего вы не должны делать).

например:

>>> l = range(4) 
>>> list = 'something' 
>>> isinstance(l,list) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types 
>>> 

EDIT: Согласно Plone website, Zope 2 "Сценарий Python" являются устаревшими технологиями, и вы больше не должны писать код Plone через интерфейс управления Zope с помощью сценариев Python. Вместо этого создайте надстройку и создайте в браузере Zope 3.

+0

Я никогда не назначал переменную 'list'. Если я проверяю 'list', я получаю' ' – tsabsch

+0

@Maphardam: ах, да, объекты списка вместо этого заменены специальным прокси-объектом. –

-1

Как насчет этого, основываясь на http://developer.plone.org/functionality/expressions.html#python-expression? Вы можете попробовать что-н, как

expression = Expression("if isinstance(var, list): myflag=True") 
expression_context = getExprContext(self.context) 
value = expression(expression_context) 
+0

хорошая идея, но не разрешено импортировать продукты.CMFCore.Expression – tsabsch

+0

Это не касается проблемы вообще; Объекты Expression также ограничены выражениями Python. –

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