如何让Python捕获AssertionError后打印信息并继续执行逻辑?
处理AssertionError并让程序继续执行的解决方案
嘿,这问题其实很好搞定!默认情况下,assert语句失败时会直接抛出AssertionError并终止程序,但我们可以用Python的异常捕获机制来拦截这个错误,打印你想要的信息,然后让程序继续跑后续逻辑。
具体实现思路
核心就是用try-except代码块包裹可能触发断言错误的逻辑:
- 把可能触发
AssertionError的代码放在try块里 - 在
except块中专门捕获AssertionError,打印指定提示 - 处理完错误后,程序会自动跳转到
try-except块之后的代码继续执行
结合你的场景的代码示例
结合你导入的模块,假设你的逻辑是读取PLC数据后做断言验证,示例代码如下:
from cpppo.server.enip.get_attribute import proxy_simple from datetime import datetime import time, csv, sys def process_plc_data(): # 初始化PLC代理并读取数据 plc_proxy = proxy_simple(host="your_plc_host") tag_data = plc_proxy.read(("target_tag",)) try: # 这里是你需要验证的断言逻辑 assert tag_data["target_tag"] <= 100, "数据超出阈值" print("断言验证通过,执行正常流程") except AssertionError: # 捕获断言错误,打印你需要的信息 print("Assertion Error") # 若需要查看具体失败原因,可添加这行: # print(f"错误详情: {str(e)}") # 以下是后续要执行的逻辑,无论断言是否失败都会运行 print("开始执行后续处理...") with open("plc_log.csv", "a", newline="") as log_file: writer = csv.writer(log_file) writer.writerow([datetime.now(), tag_data.get("target_tag", "读取失败")]) # 模拟循环执行的业务逻辑 while True: process_plc_data() time.sleep(3)
注意事项
- 不要过度依赖这种方式:断言本质是用来做调试和逻辑验证的,如果是生产环境需要处理的预期错误,更推荐用
if条件判断主动处理,而非捕获断言异常。 - 若需要定位具体失败原因,可以在
except后加上as e,比如except AssertionError as e:,然后打印e来查看断言的自定义提示。
这样修改后,当断言触发错误时,程序会打印你要的“Assertion Error”,然后继续执行后续的日志写入等逻辑,不会直接终止啦!
内容的提问来源于stack exchange,提问作者Bitcoin Murderous Maniac
相关产品推荐
相关产品推荐

