【发布时间】:2015-11-14 13:00:49
【问题描述】:
为清楚起见编辑:
我正在尝试解决导致错误的category 是None 的问题:TypeError: Incompatible collection type: None is not list-like
在创建此对象category 的实例时,我试图检查是否有字符串、int 或对象,以便通过表中的 ORM 传递它。我一直遇到一个错误(如上所示),所以我想创建一个检查,让对象在它们是对象时通过。
我一直在修改的代码,但并不完全符合我的期望。任何帮助/解释将不胜感激!
这里上课
class BaseAPI(object):
def create_element(self, element_text, category): # OBJ
new_element = Element(element_text, category)
self.session.add(new_element)
self.session.commit()
print(element_text)
class ConvenienceAPI(BaseAPI):
def create_element(self, element_text, category_name):
category = category_name
if type(category) == str:
category = self.retrieve_category(category_name)
elif type(category) == int:
print('Sorry integers not accepted')
else:
return super(ConvenienceAPI, self).create_element(element_text, category)
在 test.py 文件中,我创建了元素和类别的实例:
api = ConvenienceAPI()
sa = api.create_category('Situation Awareness')
api.create_element('gathering information', sa)
api.create_category('Leadership')
api.create_element('gathering information', 'Leadership')
添加运行 test.py 后的 TRACEBACK ERROR:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/Users/ack/code/venv/NotssDB/notssdb/test/test.py", line 41, in test1
sa3 = api.create_element('projecting and anticipating future state', sa)
File "/Users/ack/code/venv/NotssDB/notssdb/api/convenience.py", line 22, in create_element
return super(ConvenienceAPI, self).create_element(element_text, category)
File "/Users/ack/code/venv/NotssDB/notssdb/api/object.py", line 192, in create_element
new_element = Element(element_text, category)
File "<string>", line 4, in __init__
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/state.py", line 306, in _initialize_instance
manager.dispatch.init_failure(self, args, kwargs)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/state.py", line 303, in _initialize_instance
return manager.original_init(*mixed[1:], **kwargs)
File "/Users/ack/code/venv/NotssDB/notssdb/model/base.py", line 180, in __init__
self.category = category
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 224, in __set__
instance_dict(instance), value, None)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 1022, in set
lambda adapter, i: adapter.adapt_like_to_iterable(i))
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 1038, in _set_iterable
new_values = list(adapter(new_collection, iterable))
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 1022, in <lambda>
lambda adapter, i: adapter.adapt_like_to_iterable(i))
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/collections.py", line 636, in adapt_like_to_iterable
given, wanted))
TypeError: Incompatible collection type: None is not list-like
-------------------- >> begin captured stdout << ---------------------
--start db Session--
Situation Awareness
(u'Leadership', 1)
【问题讨论】:
-
如果
type(x) == unicode怎么办? -
x = category。你是说x=category_name吗? -
@Two-BitAlchemist 而不是字符串可能更好:isinstance(x, basestring)
-
@MosheRabaev 我遇到的问题是,当我创建一个元素的实例时,如果该对象不是一个对象,我会收到一个 Traceback 错误,表明 Category 是 NONE。通过测试和转换,我可以避免这个错误。我不认为我完全理解你的评论。
-
category来自哪里,最好在某个地方定义它?
标签: python python-2.7 oop inheritance sqlalchemy