4

我正在尝试在 Plone Products.PythonScript 中检查变量的类型。我试过这段代码:

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

不幸的是,'list' 和 'type' 在 PythonScript 中受到限制。我收到了这个错误:

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

有没有可能检查我的变量的类型?

4

3 回答 3

5

Python Script can use a special function same_type() to work around the restrictions set on types:

if same_type(var, []):

where we use the literal empty list notation, not the list type itself (since that has been reassigned).

于 2013-11-08T19:10:52.730 回答
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
>>>

编辑: 根据Plone 网站Zope 2“Python 脚本”是过时的技术,您不应再使用 Python 脚本通过 Zope 管理界面编写任何 Plone 代码。相反,创建一个附加组件并在其中创建 Zope 3 浏览器视图。

于 2013-11-08T18:29:11.713 回答
-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) 
于 2013-11-08T18:40:05.370 回答