[英]Python 'raise' without arguments: what is “the last exception that was active in the current scope”?
[英]What exception to raise for python function arguments
我現在正在創建一個包含兩個列表的函數。 我希望這兩個列表大小相等。 我試圖弄清楚如果它們的大小不一樣,我應該拋出哪種異常(或者如果我應該拋出異常)。 我有點想說ValueError,但這是實際上不涉及任何單個值的檢查。
為了清楚起見,這是我的功能存根。
def create_form(field_types, field_discriptions):
pass
您可以創建自己的異常子類,稱為ArraysNotEqualSizeException。 可能有點矯kill過正,但這很重要。
我將只使用assert
並引發AssertionError
:
assert len(field_types) == len(field_descriptions), "Helpful message"
否則,帶有消息的ValueError
似乎是最佳選擇。
將異常作為函數中的第一件事。 關鍵功能錯誤不應在不確保其能夠完成所需操作的情況下采取任何措施,否則可能會產生不良影響
這不是一個大錯誤。 你應該使用一個斷言
考慮放置斷言的地方:
在調用函數后檢查參數類型,類或值,檢查數據結構不變性,以檢查“不可能發生”的情況(列表中的重復項,矛盾的狀態變量。),以確保其返回是合理的-Python Wiki
assert len(listone) == len(listtwo),
"the function cannot continue because\
the two arguments passed are of invalid length"
一個ValueError
,如果你想使用一個通用的異常,但是,通常列於大型問題,並會少些有益的,通過攪拌機建議是正確的類型。
快速參考:
“ ValueError
當內置操作或函數接收到具有正確類型但值不適當的參數,並且情況未由更精確的異常(如IndexError)描述時引發。”- Python docs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.