Python教学:语法检测问题-由DeepSeek产生
import ast
import sys
from pathlib import Path
def syntax_validator(file_path):
"""语法检查核心函数"""
errors = []
file_path = Path(file_path)
try:
source_code = file_path.read_text(encoding='utf-8')
except FileNotFoundError:
return [{"type": "IOError", "desc": "文件不存在"}]
except UnicodeDecodeError:
return [{"type": "EncodingError", "desc": "编码格式不支持"}]
try:
ast.parse(source_code, filename=str(file_path))
except SyntaxError as exc:
error_info = {
"file": str(file_path),
"line": exc.lineno,
"column": exc.offset,
"error_type": exc.msg.split(':')[0],
"detail": exc.msg.split(':', 1)[-1].strip(),
"snippet": exc.text.strip() if exc.text else ""
}
errors.append(error_info)
return errors
def format_report(errors):
"""生成可视化报告"""
if not errors:
print("✅ 代码语法正确")
return
print(f"🔍 发现 {len(errors)} 个语法错误:")
for i, err in enumerate(errors, 1):
print(f"\n❌ 错误 #{i}")
print(f" 文件路径:{err['file']}")
print(f" 位置:第 {err['line']} 行,第 {err['column']} 列")
print(f" 错误类型:{err['error_type']}")
print(f" 错误描述:{err['detail']}")
if err['snippet']:
print(f" 问题代码:{err['snippet']}")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("使用方法:python syntax_checker.py <python文件路径>")
sys.exit(1)
result = syntax_validator(sys.argv[1])
format_report(result)
功能亮点说明
1.多维度错误捕获
- 文件系统错误检测(文件不存在、编码问题)
- 语法树解析错误定位
- 错误代码片段提取
2.智能错误分类
错误示例输出:
🔍 发现 1 个语法错误:
❌ 错误 #1
文件路径:test.py
位置:第 5 行,第 11 列
错误类型:invalid syntax
错误描述:expected ':'
问题代码:if x = 5
3.扩展性设计
- 可集成到CI/CD流程
- 支持扩展错误类型检测(通过继承
ast.NodeVisitor
) - 可添加自定义规则检查(如变量命名规范)
使用方式
- 保存为
syntax_checker.py
- 终端执行:
bash
python syntax_checker.py 待检测文件.py
注意事项
- 本工具基于AST解析,只能检测静态语法错误
- 运行时错误(如类型错误、导入错误)需结合单元测试
- 对于多文件项目建议配合
pylint
或flake8
使用
性能优化方向
- 添加多文件批处理功能
- 实现错误分级机制(致命错误/警告)
- 集成自动修复建议功能
- 添加忽略规则配置(如忽略特定警告)
该工具可作为Python开发的基础质量门禁工具,特别适用于教学环境中的代码审查和自动化测试场景。对于企业级项目,建议结合类型提示检查(mypy)和代码风格检测(black)构建完整的代码质量检测体系。