Mypy 会抛出多行 f 字符串的语法错误,尽管代码运行没有错误

问题描述 投票:0回答:1

我正在使用 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
始终会因语法错误而失败。

我的问题:

  1. 为什么
    mypy
    认为这是一个语法错误,即使 Python 3.12 接受它?
  2. 这是
    mypy
    的限制吗?还是我忽略了 Python 语法中可能导致问题的某些内容?
python syntax-error mypy f-string python-3.12
1个回答
0
投票

事实证明我调用的 mypy 可执行文件在 Python 3.11 环境中运行。添加

--python-version=3.12
--python-executable=/path/to/python312/python3
都没有帮助。

但是,当使用在 Python 3.12 环境中运行的 mypy 时修复了此问题。

所以错误是以下组合:

  1. 自 Python 3.12 起才允许在 f 字符串中使用换行符并且
  2. 在 Python 3.11 环境中运行 mypy
© www.soinside.com 2019 - 2024. All rights reserved.