为何执行Python脚本时出现ModuleNotFoundError: No module named 'mysql'错误?
问题排查与修复方案
先明确几个关键排查点,再给出优化后的脚本:
核心排查步骤
- 手动执行
./mysqldumpBashScript.sh,确认是否成功生成latestDBBackup.sql,以及文件是否有有效内容——如果备份脚本跑失败,后续的文件操作必然报错。 - 检查当前用户对
latestDBBackup.sql的读写权限,权限不足会直接触发PermissionError。 - 务必看清楚具体的异常信息(比如是
FileNotFoundError、PermissionError还是其他),这是定位问题的核心依据。
脚本优化与修复
你的脚本存在几个潜在问题:导入了未使用的mysql.connector模块、文件操作无异常处理、未检查备份脚本执行结果、未使用安全的文件读写方式。以下是修复后的版本:
#!/usr/bin/python3 import os import datetime # 先检查备份脚本执行状态 exit_code = os.system("./mysqldumpBashScript.sh") if exit_code != 0: print(f"备份脚本执行失败,退出码:{exit_code}") exit(1) def search_str(file_path, word): # 用with上下文管理器自动处理文件关闭,避免资源泄漏 try: with open(file_path, 'r') as f: filedata = f.read() except FileNotFoundError: print(f"错误:找不到文件 {file_path}") return except PermissionError: print(f"错误:无权限读取文件 {file_path}") return now = datetime.datetime.now().strftime("%w_%m_%Y_%H_%M") newdata = filedata.replace(word, f"{word}_{now}") try: with open(file_path, 'w') as f: f.write(newdata) except PermissionError: print(f"错误:无权限写入文件 {file_path}") return print(f"文件 {file_path} 已成功修改") search_str('latestDBBackup.sql', 'classicmodels')
优化说明
- 移除了未使用的
mysql.connector相关导入,消除不必要的依赖干扰。 - 添加备份脚本执行结果检查,避免在备份失败的情况下执行后续操作。
- 使用
with语句管理文件,确保文件自动关闭,避免资源泄漏。 - 增加常见异常捕获与提示,方便快速定位问题。
- 用f-string简化字符串拼接,提升代码可读性。
内容的提问来源于stack exchange,提问作者Spyro
相关产品推荐
相关产品推荐

