[英]How do I tell MyPy that errors about os.path are not errors?
在 VS Code 中,Problems 選項卡在使用os.path.join
時顯示錯誤,但代碼實際運行。 我如何告訴 MyPy 這些不是錯誤?
我在 Salome 平台上工作,運行的現有代碼顯示以下錯誤:(具體程序是 envSalome.py,它是啟動整個 salome-meca 表演的程序):
import os
kernel_root=os.getenv("KERNEL_ROOT_DIR")
kernel_root = os.path.realpath(kernel_root) # this is line 39 in the error below
sys.path[:0]=[os.path.join(kernel_root,"bin","salome")] # this is line 40 in the error below
該程序運行沒有錯誤。
我已經使用了 VS Code 左下角的 python 解釋器鏈接到 select 附帶 Salome 的 python3.exe(並且運行此代碼沒有錯誤)。
我的問題:
在終端 window 的“問題”選項卡中,MyPy 顯示以下錯誤:
“realpath”的類型變量“AnyStr”的值不能是“Optional[str]” mypy(error) [39, 16]
“join”的參數 1 具有不兼容的類型“Optional[str]”; 預期“聯合[str,_PathLike[str]]” mypy(錯誤)[40,29]
os.getenv("KERNEL_ROOT_DIR")
可能返回str
或None
。 您沒有考慮到這一點,而 mypy 告訴您,當它返回None
時您沒有涵蓋該案例。
如果您希望該值始終存在於環境中,我建議使用不返回None
的 function ,例如
kernel_root=os.environ["KERNEL_ROOT_DIR"]
MyPy 只是在做它應該做的事情: “鍵入檢查你的代碼並找到常見的錯誤。 ” 。
在這種情況下,錯誤是有意義的,因為os.getenv(key, default=None)
返回“環境變量鍵的值(如果存在,則返回默認值)。 ”。 如果KERNEL_ROOT_DIR
環境變量,則os.path
真實路徑或join
realpath
將引發異常。
如果您100% 確定KERNEL_ROOT_DIR
變量將始終存在於您將運行此代碼的環境中,您可以告訴 MyPy 忽略這些錯誤。 (我們告訴 MyPy 忽略它們,因為 MyPy 無法了解您的 Salome 平台或理解它們不是錯誤。)
有幾種方法。
您可以通過在該行上添加特殊的# type: ignore[code]
注釋來消除那些特定行上的特定錯誤:
kernel_root = os.getenv("KERNEL_ROOT_DIR")
kernel_root = os.path.realpath(kernel_root) # type: ignore[type-var]
sys.path[:0] = [os.path.join(kernel_root, "bin", "salome")] # type: ignore[arg-type]
要在 VS Code 的問題選項卡上顯示確切的 MyPy 錯誤代碼,請將以下內容添加到您的settings.json 中:
"python.linting.mypyArgs": [
"--show-error-codes"
]
如果您不關心查找特定的錯誤,而只想消除該行的所有錯誤,則可以刪除[code]
部分並執行# type: ignore
。
如果您可以將這些行隔離到特定模塊中,則可以告訴 MyPy 忽略該特定模塊的所有錯誤。 這可以通過創建一個MyPy 配置文件來完成,該文件是一個mypy.ini或一個.mypy.ini或一個放置在工作區根目錄下的setup.cfg文件,然后添加ignore_errors
選項。
例如,如果這些行是 package myproject內的模塊config.py的一部分,則擁有此 MyPy 配置文件將使這些錯誤靜音:
[mypy-myproject.config]
ignore_errors = True
如果您只想忽略配置文件中的特定錯誤代碼,可以使用disable_error_code
選項,但它只是一個全局設置:
[mypy]
disable_error_code = type-var
上面的示例忽略了其中一個錯誤:
但請注意,這也會忽略同一模塊上其他行的其他錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.