我正在使用 Python 3.12,最近在我的项目中添加了
mypy
类型检查。我遇到了一个奇怪的问题,其中 mypy
对代码中的某些 f 字符串抛出语法错误,特别是那些在 f 字符串中间带有换行符的字符串。奇怪的是 Python 解释器根本不抱怨并且运行代码很好。
这是
mypy
标记为语法错误的 f 字符串类型的简化示例:
name = "Alice"
message = f"Hello, {name
}, welcome!"
我的错误:
mypy minimal_reproducible_example.py
src/loculus_preprocessing/alice.py:2: error: unterminated string literal (detected at line 2) [syntax]
Found 1 error in 1 file (errors prevented further checking)
即使添加
--python-version 3.12
也无法解决问题。
我知道建议对多行字符串使用三引号 (
"""
),但在这种情况下,代码可以在解释器中正常运行,而 mypy
始终会因语法错误而失败。
我的问题:
mypy
认为这是一个语法错误,即使 Python 3.12 接受它?mypy
的限制吗?还是我忽略了 Python 语法中可能导致问题的某些内容?事实证明我调用的 mypy 可执行文件在 Python 3.11 环境中运行。添加
--python-version=3.12
和 --python-executable=/path/to/python312/python3
都没有帮助。
但是,当使用在 Python 3.12 环境中运行的 mypy 时修复了此问题。
所以错误是以下组合: