mypy 0.942 仅在 Linux 上拒绝 'match'?
mypy 0.942 rejects 'match' only on Linux?
mypy 0.942 判断此程序在 Mac OS 12.2.1 上正确,但拒绝第二行作为 Ubuntu 上的语法错误18.04:
e = 'a'
match e:
case name if isinstance(e, str):
print('name', e)
case x if isinstance(e, int):
print('int', e)
我在两个系统上运行相同的命令:
mypy --python-version 3.10 x.py
我是做错了什么还是应该将其报告为错误?
我没有 mypy.ini
文件。我尝试删除 .mypy_cache
目录并得到相同的结果。
这是带有 -v
(详细)标志的输出:
$ mypy --python-version 3.10 -v --python-executable /home/bkovitz/local/bin/python3.10 x.py
LOG: Could not load plugins snapshot: @plugins_snapshot.json
LOG: Mypy Version: 0.942
LOG: Config File: Default
LOG: Configured Executable: /home/bkovitz/local/bin/python3.10
LOG: Current Executable: /usr/bin/python3
LOG: Cache Dir: .mypy_cache
LOG: Compiled: True
LOG: Exclude: []
LOG: Found source: BuildSource(path='x.py', module='x', has_text=False, base_dir='/home/bkovitz/stuff')
LOG: Could not load cache for x: x.meta.json
LOG: Metadata not found for x
LOG: Parsing x.py (x)
LOG: Bailing due to parse errors
LOG: Build finished in 0.011 seconds with 0 modules, and 1 errors
x.py:2: error: invalid syntax [syntax]
Found 1 error in 1 file (errors prevented further checking)
我看到 Current Executable
是错误的:那是 Python 3.6.9(Ubuntu 需要)。那python3
不是第一个PATH
。 PATH
中的第一个 python3
与 Configured Executable
在同一目录中,并且是 Python 3.10.2.
问题是 mypy 脚本中的 shebang 行调用了错误的 python3
可执行文件。我把 ~/local/bin/mypy
的第一行改成了:
#!/usr/bin/python3
对此:
#!/home/bkovitz/local/bin/python3
它奏效了。后者是 Python 3.10,与 Python 3.6.9.
不同,它大概有一个可以为 match
语句制作 AST 的解析器
我还必须在 shell 提示符下 运行 hash -r
。 shell 缓存了以前版本的 mypy
脚本,因此编辑文件无效 (!)。
mypy 0.942 判断此程序在 Mac OS 12.2.1 上正确,但拒绝第二行作为 Ubuntu 上的语法错误18.04:
e = 'a'
match e:
case name if isinstance(e, str):
print('name', e)
case x if isinstance(e, int):
print('int', e)
我在两个系统上运行相同的命令:
mypy --python-version 3.10 x.py
我是做错了什么还是应该将其报告为错误?
我没有 mypy.ini
文件。我尝试删除 .mypy_cache
目录并得到相同的结果。
这是带有 -v
(详细)标志的输出:
$ mypy --python-version 3.10 -v --python-executable /home/bkovitz/local/bin/python3.10 x.py
LOG: Could not load plugins snapshot: @plugins_snapshot.json
LOG: Mypy Version: 0.942
LOG: Config File: Default
LOG: Configured Executable: /home/bkovitz/local/bin/python3.10
LOG: Current Executable: /usr/bin/python3
LOG: Cache Dir: .mypy_cache
LOG: Compiled: True
LOG: Exclude: []
LOG: Found source: BuildSource(path='x.py', module='x', has_text=False, base_dir='/home/bkovitz/stuff')
LOG: Could not load cache for x: x.meta.json
LOG: Metadata not found for x
LOG: Parsing x.py (x)
LOG: Bailing due to parse errors
LOG: Build finished in 0.011 seconds with 0 modules, and 1 errors
x.py:2: error: invalid syntax [syntax]
Found 1 error in 1 file (errors prevented further checking)
我看到 Current Executable
是错误的:那是 Python 3.6.9(Ubuntu 需要)。那python3
不是第一个PATH
。 PATH
中的第一个 python3
与 Configured Executable
在同一目录中,并且是 Python 3.10.2.
问题是 mypy 脚本中的 shebang 行调用了错误的 python3
可执行文件。我把 ~/local/bin/mypy
的第一行改成了:
#!/usr/bin/python3
对此:
#!/home/bkovitz/local/bin/python3
它奏效了。后者是 Python 3.10,与 Python 3.6.9.
不同,它大概有一个可以为match
语句制作 AST 的解析器
我还必须在 shell 提示符下 运行 hash -r
。 shell 缓存了以前版本的 mypy
脚本,因此编辑文件无效 (!)。