一个方法的两个return语句?蟒蛇

时间:2017-07-05 13:52:22

标签: python return openerp

我有一个应该打印报告的方法。有两个报告使用相同的方法打印但具有不同的条件。我已经给出了if-else条件,但有些原因是else部分没有被执行! 请帮助我解决问题

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,
                            }

4 个答案:

答案 0 :(得分:1)

我不明白你的问题,因为你的代码完美无缺。 以下代码适用于我:

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

它返回“abc”......

答案 1 :(得分: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

答案 2 :(得分:1)

现在我们确切地知道发生了什么,Python的返回声明实际上已退出&#39;之后该功能不再继续。您需要的是跟踪所有报告,然后返回它而不是立即返回。一种方法是使用列表或元组。

我更喜欢列表,因为它们是可变的以备将来使用,但如果您需要使用元组,请使用( )代替[ ]

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"]

进行操作

答案 3 :(得分:0)

嗯,你提供的代码总是会打印报告abc,因为你比较的东西总是返回false(正如其他人所说的那样)。

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

现在,如果您提供的代码片段代表函数的一部分并假设count变量跟踪迭代,则需要在迭代后使用return语句以确保所有内容都已计入对

for count in list:
    # Do something

if a > count:
    return xyz
else:
    return abc

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

作为备注: 如果您需要更多相关答案,请添加更多代码以更好地表示您所要求的内容(例如函数,类或检索并随后操作输入的区域)。不要只提供出现错误的代码,还要提供导致错误的代码。