【问题标题】:Trying to check if object has a list and assert if not尝试检查对象是否有列表,如果没有则断言
【发布时间】:2015-08-26 16:09:11
【问题描述】:

问题:我正在尝试调试 class 中的一个函数,以确保实现了一个列表,如果没有,我希望抛出一个错误。我是编程新手,我试图弄清楚如何有效地添加assert 用于上述调试目的。

class BaseAPI() 的方法主体中,我必须遍历列表并为 ConvenienceAPI(BaseAPI) 中的每个项目调用 retrieve_category,将新列表传递给您的 super()。我认为我做错了什么,因为我得到了错误:TypeError: create_assessment() got an unexpected keyword argument 'category'

问题 2 我还希望category 有一个包含多个类别(字符串)的列表。这不是现在发生的。方法中的列表没有被迭代或创建。我不确定...请参阅下面的回溯错误。

代码

实例化categories的列表:

api = BaseAPI()
api.create_assessment('Situation Awareness', 'Developing better skills', 'baseball', 'this is a video','selecting and communicating options', category=['Leadership', 'Decision-Making', 'Situation Awareness', 'Teamwork and Communication'])

assertcreate 所在的 BaseAPI() 方法

class BaseAPI(object):

    def create_assessment(self, name, text, user, video, element, category):     
        category = [] # Trying to check if category isn't a list
        assert category, 'Category is not a list'
        new_assessment = Assessment(name, text, user, video, element, category)
        self.session.add(new_assessment)
        self.session.commit()

NEW ADD 迭代列表,但仍给出 Error!

class ConvenienceAPI(BaseAPI):          
    def create_assessment(self, name, text, username, videoname, element_text, category_name):
        user = self.retrieve_user(username)
        video = self.retrieve_video(videoname) 
        element = self.retrieve_element(element_text)
        categories = self.retrieve_category(category_name)
            for items in categories: # < ==== added 
            return categories # < ==== added 
        return super(ConvenienceAPI, self).create_assessment(name, text, user, video, element, categories)    

表格

class Assessment(Base):
    __tablename__ = 'assessments'
    #some code

    category_id = Column(Integer, ForeignKey('categories.category_id'))  
    category = relationship('AssessmentCategoryLink', backref='assessments')


    def __init__(self, name, text, user, video, element, category): # OBJECTS !!
        #some code
        self.category = []

TracebackError

ERROR: db.test.test.test1
----------------------------------------------------------------------
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 69, in test1
    api.create_assessment('Situation Awareness', 'Developing better skills', 'baseball', 'this is a video','selecting and communicating options', category=['Leadership', 'Decision-Making', 'Situation Awareness', 'Teamwork and Communication'])
TypeError: create_assessment() got an unexpected keyword argument 'category'

【问题讨论】:

  • 你能发布完整的回溯吗?
  • @AnandSKumar 添加了!
  • 你可以试试打印 - print(type(api)) 吗?

标签: python function oop sqlalchemy assert


【解决方案1】:

你的断言语句应该是:

assert isinstance(category, list)

同时删除 category = [] 行。

【讨论】:

  • 添加列表怎么样? BaseAPI 需要创建一个列表,而继承类中的 super 需要推送列表。也许添加new_assessment = Assessment(name, text, user, video, element, category=[])
  • 你能更好地解释你想要做什么。你在这里拥有的东西对我来说没有多大意义。您正在使用“category=[]”调用超级方法,因此它必然是一个列表。
【解决方案2】:

您将类别作为 kwarg 传递,但方法签名期望它作为位置参数。 尝试将方法签名更改为

class BaseAPI(object):
    def create_assessment(self, name, text, user, video, element, category=[]): 

或使用位置参数调用它

return super(ConvenienceAPI, self).create_assessment(
    name, text, user, video, element, category=category
) 

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2015-06-21
    相关资源
    最近更新 更多