我想打電話給方法f()
,但不小心我只是說f
。 Python3會錯誤地對一個不存在的變量進行無意義的評估,因此會跳過我預期的方法調用而沒有任何通知。有沒有辦法來覆蓋這種默認行爲並獲取錯誤消息?通過禁止將標識符作爲方法和變量雙重使用,或者禁止只包含標識符的無意義陳述?Python:有沒有方法來檢測方法調用中的missing()?
回答
它是有效的語法,所以Python不會抱怨。你可能想考慮一些其他工具,如pylint。 pylint的會一直報道:
W: 4,0: Statement seems to have no effect
如果你壓根兒:代替
f
:
f()
,唯一的缺點是pylint的可以投訴非常多開箱。確保創建一個容忍你的風格的配置。
In [1]: def f():
...: print("This is some random function")
...: return
In [2]: a = f
In [3]: a()
This is some random function
In [4]: somedict = {"call_something": f, "call_another": a}
In [5]: somedict["call_something"]()
This is some random function
In [6]: f
Out[6]: <function __main__.f>
使用功能,而無需調用它是完全有效的語法,並具有多種用途如我剛剛所示。這不是a meaningless evaluation of a nonexisting variable
,因爲函數本質上是變量。
謝謝你的解釋。仍然:一個包含函數名稱'f'的語句_is_毫無意義,這幾乎肯定是一個錯誤,我希望能夠自動檢測到它的方法。 – 2013-04-04 09:52:03
通常的方法來確保你的代碼做它應該寫的是unit tests。如果您有良好的測試覆蓋率,這種類型的錯誤不會因此而下滑。
在Python中傳遞函數/方法的引用是非常常見的(也是有用的),所以它不是你應該禁用的東西。
Zing。但是是真的。 – Joe 2013-04-04 09:50:39
唉,沒有。 Python沒有任何嚴格的警告模式(比較Perl和Ruby)。此外,這些線是有效的陳述,因此對它們發出警告是不公平的。
你可以編寫自己的代碼檢查器來查找這些線條。搜索是沒有任何標點符號一個字,而且是一個Python標識符(而不是作爲break
這樣的關鍵字)
- 1. 有沒有一種標準的方法來檢測方向性?
- 2. '檢測到沒有[Pure]的方法的調用'...但Pure有
- 3. 有沒有更好的方法來測試這種方法?
- 4. 有沒有標準的方法來檢測硬件的位寬?
- 5. 有沒有一種方法可以檢測API被調用的來源?
- 6. 有沒有一種方法來單元測試異步方法?
- 7. JSF:actionListener方法從來沒有調用
- 8. Python:有沒有更好的方法來跳過測試模塊?
- 9. 有沒有辦法來檢測哪個MutationObserver回調被調用?
- 10. 有沒有一種方法來檢測關鍵記錄軟件?
- 11. 有沒有一種方法來檢測WP7.1
- 12. Firebase.database()對象沒有'ref'方法或'參考'方法來調用
- 13. whyWithAuth:方法沒有調用?
- 14. performSelectorOnMainThread方法沒有調用
- 15. OpenEarsEventObserverDelegate方法沒有調用
- 16. 有沒有一種檢測方案實現的標準方法?
- 17. 有沒有簡單的方法來在elisp中調用函數?
- 18. 有沒有可靠的方法來檢測瀏覽器在C#中啓用JavaScript?
- 19. 檢測方法調用
- 20. 有了WPF,有沒有一種方法可以檢測阻止GUI更新的方法調用?
- 21. 有沒有更好的方法來測試一個類的個別方法
- 22. 有沒有簡單的方法來使用Common Lisp的Python庫?
- 23. Backbone.Collection沒有方法來JSON
- 24. python int沒有__iadd __()方法?
- 25. 在Python中,有沒有簡單的方法來編輯xml?
- 26. 有沒有「正確」的方法來測試HTML有效性?
- 27. 有沒有更好的方法來編寫下面的方法?
- 28. 有沒有測試方法處理併發呼叫的方法?
- 29. form.parse()方法沒有在node.js中調用
- 30. 有沒有方法來decltype不可調用函數的結果?
'F'指功能而不調用它,而不是「不存在的變量的意義評價」線。這就是爲什麼你沒有得到'SyntaxError'。 Python不區分函數名和變量名 - 它們只是'globals()'字典中的鍵。 – Volatility 2013-04-04 09:43:46
*「禁止將標識符作爲方法和變量的雙重使用」* - 在python中,method *是變量 – 2013-04-04 10:00:04
@Joachim,你對發生的事情不太正確(讀取@Volatility),但我理解你爲什麼要警告這一點。如果您習慣於編寫Ruby,那麼這是一個非常簡單的錯字。 – 2013-04-04 10:17:13