2017-07-05 23 views
2

我有一个应该打印报告的方法。有两个报告使用相同的方法打印,但条件不同。我已经给了if-else条件,但是有些原因,其他部分没有被执行! 请帮助我这个问题一种方法的两个返回语句? Python

count = 80 
a = 20 
if a > count: 
    return xyz 
else: 
    return abc 

ABC和XYZ是两种不同类型的,我有报道。

编辑: 这是我的实际功能。在每一个我提取我的记录。

  for inv_no in each: 
       if inv_no.invoice_date > '2017-06-30': 
        return { 
          'type': 'ir.actions.report.xml', 
          'report_name': 'gst_invoice_print', 
          'datas': datas, 
          } 
       else: 
        return { 
          'type': 'ir.actions.report.xml', 
          'report_name': 'invoice_print', 
          'datas': datas, 
          } 
+3

那么,它不会被执行,因为20不会大于80. –

+0

@DanielRoseman,那么不应该执行else块'20> 80'为假 – corn3lius

+0

我无法重现您的问题。 – yinnonsanders

回答

1

我不明白你的问题,因为你的代码完美工作。 下面这段代码的工作对我来说:

count = 80 
a = 20 
def test(a, count): 
    if a > count: 
     return "xyz" 
    else: 
     return "abc" 
print test(a,count) 

返回“ABC” ......

+0

你确定20总是大于80吗? – kazemakase

+0

你是对的@kazemakase,我写信给快哈哈 – Klipiklop

1

我看到你最后称道的,所以这是你应该如何比较日期。

Odoo日期没有可比性,直到将它们转换为datetime对象,所以odoo日期转换为datetime对象使用:

a = datetime.strptime(self.date_field1, "%Y-%m-%d") 
b = datetime.strptime(self.date_field1, "%Y-%m-%d") 
# where date_field1 and date_field2 are something like this 2017-01-01 
# now you can compare a and b 
if a < b: 
    drink beer 
else: 
    drink more beer 
0

好了,你提供的代码总是要打印,因为该报告ABC什么你比较总是返回假(正如其他人所说的)。

如果您确实想要根据情况检索两个报告中的任何一个(在比较情况下),一个或两个值都应该是可变的。所以它们需要由用户输入,函数的参数或输入的计算机(例如计算机提供的变量,如时间)

现在,如果您提供的代码片段代表您的函数的一部分并且假设count变量正在跟踪迭代,您需要在迭代之后获得return语句以确保所有内容都被计入。

for count in list: 
    # Do something 

if a > count: 
    return xyz 
else: 
    return abc 

然而,a变量或list变量(不为变量使用一览作为名字,这只是一个例子)必须是可变的。否则,该函数将始终返回相同的内容。

作为一个说明: 如果您想了解更多相关的答案,包括更多的代码,更好地代表你的要求(如函数,类,或者输入检索,然后操纵的区域)。不要仅仅在代码出现错误的地方提供代码,而且还要提供代码。

1

所以,现在我们知道到底发生了什么,Python的return语句实际上'退出'了函数,之后不会继续执行它。您需要的是跟踪所有报告,然后返回,而不是立即执行。一种方法是使用列表或元组。

我更喜欢列表,因为它们可以随时使用,但如果您需要使用元组,请使用()而不是[ ]

reports = [] 
for inv_no in each: 
    if inv_no.invoice_date > '2017-06-30': 
     reports.append({ 
         'type': 'ir.actions.report.xml', 
         'report_name': 'gst_invoice_print', 
         'datas': datas, 
         }) 
    else: 
     reports.append({ 
         'type': 'ir.actions.report.xml', 
         'report_name': 'invoice_print', 
         'datas': datas, 
         }) 

return reports 

这样你可以得到每个日期的适当报告。要在代码中稍后访问报告,你需要使用reports["index of list"]["key of dict"]