4.2 KiB
4.2 KiB
Python版本兼容性说明
问题分析
原始脚本使用了Python 3.7+的语法特性,在Python 3.6环境运行报错:
SyntaxError: invalid syntax
具体问题
from __future__ import annotations- Python 3.7+特性- 类型注解语法
-> None- 在__future__导入后变为强制语法
解决方案
文件版本说明
| 文件名 | Python版本 | 特性支持 | 适用环境 |
|---|---|---|---|
02_parse_score_data_fixed.py |
3.7+ | 类型注解 + f-string | 开发环境 |
02_parse_score_data_py36.py |
3.6+ | 移除类型注解 | 兼容版本 |
02_parse_score_data_py36_compatible.py |
3.6+ | 移除类型注解 + .format()格式 | 中等兼容环境 |
02_parse_score_data_py34_compatible.py |
3.4+ | 无typing模块 + .format()格式 | 超老环境推荐 |
常见错误及解决方案
错误:ImportError: No module named typing
原因: Python版本过低(< 3.5)或未安装typing模块
解决: 使用 02_parse_score_data_py34_compatible.py
错误:SyntaxError: invalid syntax (f-string)
原因: Python版本不支持f-string(< 3.6)
解决: 使用带.format()的兼容版本
错误:SyntaxError: invalid syntax (类型注解)
原因: Python版本不支持类型注解语法 解决: 使用移除类型注解的版本
生产环境使用
方法1:智能启动脚本(强烈推荐)
# 自动检测Python版本和可用模块,自动选择最合适的脚本版本
./run_parser.sh
# 查看运行日志
tail -f 2.log
方法2:手动选择版本
# 对于超老环境(Python < 3.6 或无typing模块)
nohup python3 02_parse_score_data_py34_compatible.py > 2.log 2>&1 &
# 对于Python 3.6环境
nohup python3 02_parse_score_data_py36_compatible.py > 2.log 2>&1 &
方法2:直接运行
# Python 3.6环境使用完全兼容版本
nohup python3 02_parse_score_data_py36_compatible.py > 2.log 2>&1 &
# 查看运行日志
tail -100f 2.log
进程管理
# 查看进程状态
ps aux | grep python
# 停止进程
kill $(cat parser.pid)
# 查看日志统计
grep "解析成功" 2.log | wc -l # 成功记录数
grep "解析失败" 2.log | wc -l # 失败记录数
版本对比
02_parse_score_data_py36_compatible.py (推荐用于生产环境)
- ✅ 完全兼容Python 3.6
- ✅ 使用
.format()替代 f-string - ✅ 移除所有类型注解
- ✅ 避免复杂的字符串嵌套表达式
- ✅ 稳定的生产环境运行
代码修改内容
移除的特性
# 移除此行
from __future__ import annotations
# 函数定义从:
def connect_db(self) -> None:
# 改为:
def connect_db(self):
保持兼容的特性
- f-string (Python 3.6+)
pathlib(Python 3.6+)dataclasses(Python 3.7+但未使用)
版本检测脚本
# 检查Python版本
python3 --version
# 检查语法兼容性
python3 -m py_compile 02_parse_score_data_py36.py
环境升级建议
如果可能,建议升级生产环境到Python 3.8+,这样可以:
- 使用更新的pandas版本
- 获得更好的性能
- 支持完整的类型注解语法
- 使用现代的异步特性
故障排除指南
问题1:ImportError: No module named typing
# 原因:Python版本过低(< 3.5)
# 解决:使用无typing版本
python3 02_parse_score_data_py34_compatible.py
问题2:SyntaxError: invalid syntax (f-string相关)
# 原因:Python版本不支持f-string(< 3.6)
# 解决:使用.format()版本
python3 02_parse_score_data_py36_compatible.py
问题3:依赖安装失败
# 检查依赖安装
pip3 install --user -r requirements-prod.txt
python3 test_dependencies.py
问题4:数据库连接问题
# 检查数据库配置
python3 -c "from db_config import DB_CONFIG; print('配置正确')"
通用诊断命令
# 检查Python版本
python3 --version
# 检查typing模块
python3 -c "import typing; print('typing可用')" 2>/dev/null || echo "无typing模块"
# 检查依赖
python3 -c "import pymysql, pandas, sqlalchemy; print('依赖正常')"
# 测试脚本语法
python3 -m py_compile 02_parse_score_data_py34_compatible.py && echo "语法正确"