return -1
Python有比C的錯誤處理的不同方法如果存在與所提供的數據的問題,只是通過讓AssertionError
通,或提出一個TypeError
或ValueError
與自定義錯誤消息。與斷言語句自定義錯誤消息是最簡單的:
assert port_number > 0, "Invalid port number"
即斷言語句可以在編譯時被禁用可能是有原因的,如果你想使用斷言在您的情況語句重新考慮這一事實。通常的做法是不使用assert語句來驗證函數用戶的輸入,並且僅用於內部健全性檢查。另一方面,健康檢查和驗證之間的界限並不明確。爲您的代碼的部件,可以不斷言語句:
if port_number <= 0:
raise ValueError('Invalid port number')
if not isinstance(port_number, (int, float)):
raise TypeError('Port number must be some kind of number')
我個人使用斷言來驗證數據,如果無效,將導致崩潰反正遲早聲明(見「鴨打字」)。我還在開發過程中大量使用assert語句,以便像靜態類型語言一樣對數據進行清理檢查。如果我強烈懷疑我自己的代碼的穩定性和可靠性,我只會使用這些斷言。
下一行:
assert self.handle == None
如果我記錯,PEP8說,你應該寫assert self.handle is None
。至少它是由比我聰明的人所認可的。
assert isinstance(port_number, int) or isinstance(port_number, float)
如果你真的需要這個,它可以寫成isinstance(port_number, (int, float))
。但事實證明,你沒有。你不應該在乎是否有人傳遞了一個數字原始類型或一些自制的類來重載所有的比較運算符。
也許有一兩件事你可以做的是儘量端口轉換爲整數,看它是否可用與否:
try:
port_number = int(port_number)
except ValueError:
raise ValueError("Invalid port number")
,並且在這種情況下,你可以只通過,則讓ValueError
通消息對新手來說不會有什麼信息。
如果此代碼是一個函數的主體,我會編輯它以顯示它。 –