无法通过python传递doc测试

时间:2012-05-19 04:23:20

标签: python testing syntax

下面的代码,不确定我做错了什么。这是一个员工数据库。以下继承自Employee类。除非我的代码错了,否则不确定要做什么才能让它通过。我收到此错误“SyntaxError:关键字arg之后的非关键字arg”

class Manager(EmpSalaried): #inherits from EmpSalaried 
    def __init__(self, salary=0.0, firstName="", lastName="", ssID="", DOB=datetime.fromordinal(1), 
            startDate=datetime.today(), 
            manage=[]): #manage attribute added for manager
        Employee.__init__(self, salary, firstName, lastName, ssID, DOB, startDate)
        self.manage = manage


    def __str__(self):
        """
        >>> import datetime
        >>> e = Manager(10, 'Bob', 'Quux', '123', startDate=datetime.datetime(2009, 1, 1),          
        ['Michael', 'Bob', 'Hello'])
        >>> print e
        10, Bob Quux, 123, 0001-01-01 00:00:00, 2009-01-01 00:00:00, Michael, Bob, Hello
        >>> b = Manager(2000, 'Bob', 'Lol', '1234', startDate=datetime.datetime(2009, 1, 1),     
        ['Michael', 'Bob', 'Hello'])
        >>> print b
        2000, Bob Lol, 1234, 0001-01-01 00:00:00, 2009-01-01 00:00:00

        """
        return Employee.__str__(self) + ', ' + str(self.manage) #need to convert to a string in order to add to string

1 个答案:

答案 0 :(得分:1)

Doctests的格式与运行交互式会话的方式相同。您可以运行交互式会话并只复制它,您将获得所有结果。这可能是一个有效的会话:

>>> import datetime
>>> print Manager(10, 'Bob', 'Quux', '123', datetime.datetime(2009, 1, 1),
... ['Michael', 'Bob', 'Hello'])
10, Bob Quux, 123, 0001-01-01 00:00:00, 2009-01-01 00:00:00, Michael, Bob, Hello
>>> print Manager(2000, 'Bob', 'Lol', '1234', datetime.datetime(2009, 1, 1),     
... ['Michael', 'Bob', 'Hello'])
2000, Bob Lol, 1234, 0001-01-01 00:00:00, 2009-01-01 00:00:00

您所做的事情中存在各种语法错误;

  • 对于doctest部分,如果您继续使用该语句,则下一行必须以... 开头(与常规会话完全相同);
  • 您的Manager实例化无效(正版Python SyntaxError),因为您有startDate=...(关键字参数),后跟非关键字参数(“manager”的值)。这是阻止它运行的主要问题。这也是异常告诉你的。

如果你无法在doctest中弄清楚,在普通的Python会话中运行它。在那里玩它。

您的代码中还存在许多其他重要问题;这里有几个:

  • EmpSalariedEmployee:对此给出了什么?
  • 由于使用了可变的默认参数,如果在创建manage时未指定Manager参数,则它们将获得相同的列表。这不是你想要的。