簡體   English   中英

“刪除未使用的導入”的示例在python中會產生不良影響嗎?

[英]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__.pyserver.py中進行main.py 我肯定會認為這是錯誤的代碼,但是有可能。

我不知道這是否能回答您的問題,但是如果您刪除未使用的導入,則不會再顯示前2個圖標。

https://github.com/theonlycodingbear/unused-imports-problem.git

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM