2009-07-01 60 views
0

假設我有一個像控制方法,以便:處理控制器失蹤控制器參數2

@expose() 
def search(self, title): 
    return dict() 

http://site/search/將導致異常被拋出:類型錯誤:搜索()到底需要2個參數(1給出)。

錯誤是合乎邏輯的,但我寧願處理它更優雅。使用* args或** kwargs是唯一避免我看起來無法捕捉的錯誤的唯一方法?

編輯:我想我隨時可以使用標題=無,但該太多可以得到醜陋...

無論如何,有沒有辦法來捕獲異常和/或處理參數不匹配更多優雅?

感謝

回答

1

你拋出指定的「不兼容」控制器方法簽名只發生在調試/開發模式的異常。 您不需要在生產環境中更優雅地處理它,因爲一旦禁用開發模式,控制器方法在缺少基本參數時會發送HTTP 500錯誤。

你可能要考慮你的development.ini相應的設置:

# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* 
# Debug mode will enable the interactive debugging tool, allowing ANYONE to 
# execute malicious code after an exception is raised. 
set debug = false 

我希望這是你的問題。

如果您仍然希望控制器執行其工作,即使缺少重要參數,您也必須定義默認值,否則控制器無法正常工作。 您最好問自己的問題是:您是否想要更好的錯誤消息,還是希望控制器能夠完成任務?在後一種情況下,指定默認參數是最佳做法,對於每種方法,* args和** kwargs只是爲了讓客戶無法獲得錯誤,這在我的選擇中是非常醜陋的黑客攻擊。

如果你想改變這些錯誤的顯示是指/controllers/error.py

希望這有助於,

湯姆

+0

我的問題主要涉及如何最好地處理這樣的錯誤這個。當你提到/controllers/error.py時,我認爲你的回答最好。我會看看這個。謝謝。 – user37078 2009-09-01 12:53:03