2017-07-05 27 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"]