python报错后继续执行之前的代码_python异常报错处理

本文详细介绍了Python中的异常处理机制,包括使用try...except语句捕捉异常的方法、使用try...except...else语句处理正常情况、使用try...finally确保资源清理、自定义异常以及使用raise语句手动触发异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标签:

1.使用try...except捕捉异常

try:

s=1/0

except IndexError:

print ('except')

except KeyError:

print ('Keyerror')

except ZeroDivisionError:

print ('ZeroDivisionError')

try:

s=1/0

except:

print ('出现异常')

或有多个异常名称的格式

try:

s = 1/0

except(IndexError,KeyError,ZeroDivisionError),e:

print (e)

2.使用try ...except...else语句捕捉异常

当try块中的代码没有异常时,则跳过except块中的代码,执行else块中的代码

工作原理:

1).如果try代码块语句执行发生异常,Python就跳回try,执行第一个匹配该异常的except块中的代码

2).如果异常发生在try代码块内,没有匹配的except子句,name异常就会向上传递到程序中之前进入的try中,或者转到这个进程的顶层(这会使python终止当前程序并打印默认的错误消息)

3).如果try块中的代码执行没有异常发生,则python将执行else块中的代码

3.使用try...finally捕捉异常

当try块中包含了finally语句,则python一定会在执行完try块中的代码之后在执行finally块中的代码(无论try块中的代码是否发生异常都将执行finally块中的代码)

工作原理:

1).如果执行try块中的代码时没有发生异常,则Python会跳转至finally语句并执行该代码块,然后继续执行程序中finally语句之后的代码

2).如果执行try块中的代码时发生异常,则Python依然会执行finally语句中的代码块,但是接着会将异常向上传递到上层的try语句或顶层的默认处理器,程序不会继续执行导致发生异常的语句之后的try块中的代码。也就是说,即使发生了异常,finally代码块还是会被执行,和except不同的是,finally不会终止异常,而是在finally代码块执行后,一直处于发生状态

4.使用raise抛出异常(手工引发异常)

raise

‘异常对象’表示将引发异常的异常名称,且异常名称标识了具体的异常类。raise语句还可指定对异常对象进行初始化的参数,为此需要在异常类的名称后添加一个逗号以及指定参数(或者由参数构成的一个元组 )。一旦执行了raise语句,raise语句后的代码将不能被执行

raise,

例子:

try:

raise NameError

except NameError:

print ('抛出一个异常')

5.自定义异常

格式class MyError(Exception):

def __init__(self,value):

self.value=value

def __str__(self):

return repr(self.value)

try:

raise MyError(2*2)

except MyError,e:

print('My exceotion occurred,value:',e.value)

6.使用assert语句

用于检测某个条件表达式是否为真。又称断言语句,即assert认为检测的表达式永远为真,断言失败就会引发AssertionError异常

语法格式:assert

username = 'admin'

password='123456'

assert username =='admin' and password == 'admin','密码错误!'

标签:

来源: https://www.cnblogs.com/askill/p/10246258.html

### Python 报错仅有 message 缺少详细错误信息的解决方案 当处理 Python 中仅提供简单 `message` 而缺乏详细错误信息的情况时,可以采取以下方法增强调试能力并定位问题。 #### 增强异常捕获机制 通过自定义异常捕获逻辑,可以在程序运行过程中获取更丰富的上下文信息。例如,在捕获异常时打印堆栈跟踪或将额外的信息附加到日志中: ```python import traceback try: # 可能引发异常代码块 result = json.loads('{"key": "value"') # 故意制造 JSON 错误 except Exception as e: print(f"Error Message: {e}") print("Detailed Traceback:") traceback.print_exc() ``` 此代码片段利用了标准库中的 `traceback` 模块来显示完整的调用链路和具体位置[^1]。 #### 使用 logging 模块记录更多信息 为了更好地追踪生产环境下的问题根源,推荐引入 `logging` 库替代简单的 `print()` 函数。它支持不同级别的消息输出以及灵活配置文件存储路径等功能。 ```python import logging # 配置 logger logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') def risky_function(): try: data = {"name": None} name_length = len(data["name"]) # 这里会抛出 TypeError 或 KeyError except Exception as ex: logging.error("An error occurred.", exc_info=True) risky_function() ``` 上述例子展示了如何启用扩展模式 (`exc_info=True`) 来自动包含异常详情于日志之中[^2]。 #### 修改默认行为以展示更多细节 有时框架或者第三方库可能会截断部分原始报错内容。可以通过调整其内部参数恢复完整表述形式。比如对于 Django REST framework 的 API 请求响应,默认情况下只返回高层级概述而非底层技术实现层面的具体数值对比差异等敏感资料。此时查阅官方文档找到对应设置项即可重新开启全面披露选项。 --- ### 总结 针对 Python 报错只有简短提示而无详尽描述的现象,可以从改进本地测试脚本设计、优化全局监控体系结构两方面入手加以改善。一方面加强局部防护措施如精确指定待捕捉对象类别;另一方面则需构建统一管理平台集中收集各类事件源产生的动态变化情况以便后续分析判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值