1. Python异常处理与进程交互全指南
在Python开发中,异常处理和进程交互是两个看似基础却暗藏玄机的核心技能。我见过太多项目因为异常处理不当导致半夜报警,也调试过无数进程通信卡死的诡异问题。本文将用真实项目经验,带你掌握异常捕获的7个层级技巧和进程输出的5种解析方案。
2. Python异常处理深度解析
2.1 异常类型全景图
Python的异常体系就像一套精密的安全防护网:
- 语法错误 (SyntaxError):代码还没运行就被拦截的"先天缺陷"
- 内置异常 :包括IndexError、KeyError等常见类型
- 自定义异常 :继承Exception类的业务专属错误
class PaymentTimeout(Exception):
"""支付超时专属异常"""
def __init__(self, timeout):
self.timeout = timeout
super().__init__(f"支付接口响应超时:{timeout}s")
经验:自定义异常要包含足够上下文信息,比如这里的超时时间
2.2 异常捕获的7种段位
- 青铜段位 - 裸奔式捕获:
try:
risky_operation()
except:
pass # 埋下调试地狱的种子
- 黄金段位 - 精确捕获:
try:
parse_config()
except (FileNotFoundError, json.JSONDecodeError) as e:
logger.error(f"配置文件异常:{e}")
raise SystemExit(1)
- 钻石段位 - 上下文管理:
from contextlib import suppress
with suppress(TimeoutError):
http_request() # 自动忽略指定异常
2.3 异常处理最佳实践
-
日志记录三要素 :
- 异常类型(type(e). name )
- 错误信息(str(e))
- 堆栈轨迹(traceback.format_exc())
-
资源清理必做项 :
try:
db_conn = get_db_connection()
# 业务操作
except DBError:
logger.error("数据库操作失败")
finally:
db_conn.close() # 确保资源释放
3. 进程调用与输出解析实战
3.1 子进程调用五虎将
| 方法 | 适用场景 | 内存消耗 | 输出获取 |
|---|---|---|---|
| os.system() | 简单命令执行 | 低 | 无 |
| subprocess.run() | Python3.5+推荐 | 中 | 完整 |
| subprocess.Popen | 复杂交互场景 | 高 | 实时 |
3.2 输出解析的五个段位
- 基础版 - 直接获取输出:
result = subprocess.run(['ls', '-l'],
capture_output=True,
text=True)
print(result.stdout)
- 进阶版 - 实时处理输出:
with subprocess.Popen(['tail', '-f', 'app.log'],
stdout=subprocess.PIPE,
text=True) as proc:
for line in proc.stdout:
if 'ERROR' in line:
alert(line)
- 专家版 - 非阻塞读取:
import s


4万+

被折叠的 条评论
为什么被折叠?



