繁体   English   中英

一个方法有两个返回语句? 蟒蛇

[英]Two return statements for one method? Python

我有一种应该打印报告的方法。 有使用相同方法打印的两个报告,但条件不同。 我给出了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,
                            }

我不明白您的问题,因为您的代码运行良好。 下面的代码对我有用:

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

它返回“ abc” ...

我看到了您的最后一个推荐,所以这就是您应该比较日期的方式。

在将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

因此,既然我们确切地知道发生了什么,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"]

好吧,您提供的代码将始终打印报告abc,因为您比较的内容始终返回false(正如其他人所说的)。

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

现在,如果您提供的代码段代表函数的一部分,并且假设count变量正在跟踪迭代,则您需要在迭代之后使用return语句,以确保对所有内容进行了说明。

for count in list:
    # Do something

if a > count:
    return xyz
else:
    return abc

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

注意:如果您想要更相关的答案,请包含更多代码,这些代码可以更好地表示您的要求(例如函数,类或检索输入然后进行操作的区域)。 不要仅在有错误的地方提供代码,还要提供导致错误的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM