Python脚本def定义__init__方法时报SyntaxError无效语法是什么原因?
错误原因
你遇到的SyntaxError大概率是实际运行脚本的Python版本低于3.5导致的:
- Python 3.5才开始原生支持函数参数类型注解语法,低于3.5的版本(比如Python2)识别不了参数后面跟
:的类型注解写法,会直接报语法错误。 - 你脚本开头的shebang行是
#!/usr/bin/env python,大部分Linux/macOS系统默认python命令关联的是Python2,哪怕你激活了conda的pic2虚拟环境,如果你直接用./IgClassifyFASTA.py的方式运行脚本,系统会优先调用shebang指定的默认Python,而不是你虚拟环境里的Python3.8。
解决方案
- 先确认实际运行的Python版本,执行以下命令打印版本:
which python python --version
如果输出是Python2.x,说明运行版本不对。
- 优先使用虚拟环境的Python解释器显式调用脚本:
python IgClassifyFASTA.py # 或者如果python还是指向2,用python3 python3 IgClassifyFASTA.py
- 如果你需要直接用
./的方式运行脚本,可以把第一行的shebang改成指向Python3:
#!/usr/bin/env python3
- 要是你必须兼容更低版本的Python,可以把所有类型注解删掉,修改对应行即可:
# 修改前 def __init__(self, fasta_path: Union[Path, str]): # 修改后 def __init__(self, fasta_path):
所有带: Union[...]的方法定义都按这个规则修改即可。
内容的提问来源于stack exchange,提问作者Yeping Sun
相关产品推荐
相关产品推荐

