[英]Example of “ remove unused imports” can have bad side effects in python?
我正在尋找一個示例,說明如何刪除未使用的導入會導致破壞有效的程序。 看這個問題啟發了我的問題: https : //github.com/psf/black/issues/86
有人可以給我指出一個例子嗎?
首次導入模塊時,將運行該模塊中的所有代碼。 慣例和良好實踐表明,該模塊不應對環境的其余部分進行任何更改,但這並非總是如此(例如,當模塊處於運行狀態時,它可能會更改整個sys
中的幾個變量)首先導入)。
有人可能純粹出於其副作用而導入這樣的模塊,然后再在其余代碼中從未明確引用它。 然后,像black
這樣的整理工具/格式化工具會將其檢測為未使用並將其刪除,然后突然不再具有其副作用,結果該程序中斷了。
目前,我無法提供任何具體示例,但我知道我至少看過一個示例,並且我一直在研究這樣一個模塊,直到我意識到這是一個糟糕的主意並停下來了。
在Python中導入模塊時,您將執行該文件中的所有代碼(及其所有導入)。
按照慣例,僅此代碼是無副作用的,通常只提供類之類的東西,但是沒有真正的理由必須如此。 編寫不良的模塊可能會執行必要的步驟,以正確地作為導入期間觸發的代碼的一部分正常運行。
例如,完全可能有如下代碼:
# my_db/init.py
from my_db.core import MyDB
MyDB.do_very_important_setup()
# my_db/other.py
import my_db.init
from my_db.core import MyDB
MyDB.do_some_work_assuming_setup_has_occurred()
這很恐怖嗎? 是的 。 你應該做嗎? 不行
您能保證沒有其他人擁有嗎?
考慮您具有以下結構:
- root
|--folder1
|-- __init__.py
|-- server.py
|--main.py
以及以下內容:
# main.py
import folder1 as f
print("I am doing stuff but don't need f")
# __init__.py
from folder1 import server
# server.py
# Start a server, or do something else you need
當您刪除main.py
中的folder1
導入時,它將停止在__init__.py
和server.py
中進行main.py
。 我肯定會認為這是錯誤的代碼,但是有可能。
我不知道這是否能回答您的問題,但是如果您刪除未使用的導入,則不會再顯示前2個圖標。
https://github.com/theonlycodingbear/unused-imports-problem.git
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.