
常见的错误语法错误错误的缩进——引发IndentationErrors 1 i 5 result s i print(result)#缩进错误if s i: print(123) else: print(0000)未定义的变量括号不匹配等运行时错误尝试访问不存在的文件with codecs.open(./binary_data.bin,moderb,encodingNone) as file: binary_data file.read() print(binary_data)内存溢出类型错误——TypeError将字符串与整数相加等使用None进行算数运算或比较将不同类型的值转换为预期类型函数的期望类型与传递给它的实际类型不匹配s hello i 5 #can only concatenate str (notint) to str result s i print(result)逻辑错误程序没有按照预期的流程执行条件判断不正确输入错误无效的输入、输入的数据类型不正确等索引错误索引超出序列范围——IndexErrormy_list [1,2,3] print(my_list[4])尝试从一个空没有元素的序列如列表、元组中获取元素——IndexError从字典中获取一个不存在的键——KeyError进行切片操作时如果切片索引超出范围——IndexError常见的错误提示词SyntaxError——语法错误例如代码编写不符合Python的语法规则IndentationError——缩进错误例如代码不正确NameError——名称错误通常是由于引用了未规定或不存在的变量、函数或模块TypeError——类型错误例如使用了不兼容的数据类型或对数据类型的操作不正确ValueError——值错误通常是由于传入的参数值不符合预期要求IndexError——索引错误通常是由于访问序列列表字符串等时使用了无效的索引或超出了索引范围KeyError——键错误通常是在字典中 查找或访问不存在的键时出现FileNotFoundError——文件未找到错误通常是由于尝试打开或操作不存在的文件时引发IOError——输入/输出错误通常是由于读取或写入文件时发生了错误ZeroDivisionError——零除错误通常是由于除法运算中除数为零导致的异常异常处理的方法try excepttry: #可能引发异常的代码 except ExceptionType: #处理该异常的代码 else: #没有异常发生时执行的代码finallytry: #尝试执行代码 except ExceptionType: #当异常发生时执行的代码 finally: #无论是否发生异常都会执行的代码def divide_numbers(dividend,divisor):#接受两个参数 try: result dividend / divisor#使用try块进行除法操作 print(The result is:,result)#将结果储存在变量result中 except ZeroDivisionError: print(Error:Division by zero is not allowed.)#如果除数为0将引发ZeroDivisionError异常 finally: print(This is the finally block.) #调用函数并传入参数 divide_numbers(10,2) divide_numbers(10,0)raise用于手动引发一个异常try: #可能引发异常的代码 x 1 / 0 except Exception as e: #处理Exception异常 print(Error:,str(e)) raise #手动引发异常调试技巧断点调试:在代码行号旁双击设置断点红色圆点点击调试按钮甲壳虫图标启动调试模式可以查看变量当前值和执行流程调试工具:单步执行逐步执行代码步入进入函数内部步出从当前函数返回运行到光标处直接执行到指定位置调试器窗口:显示当前执行位置和调用栈可以查看局部变量和它们的值支持表达式求值和添加监视调试建议:在可能出错的位置前设置断点通过单步执行观察程序流程检查变量值是否符合预期不要过度依赖调试应先理解代码逻辑异常处理原则核心目的:捕获和处理异常保证程序稳定执行提供友好的错误信息使用建议:根据业务需求选择合适的异常处理方式不要滥用try-except只捕获预期可能发生的异常异常处理不是性能优化的替代品保持异常处理代码简洁清晰最佳实践:记录详细的错误日志给用户提供有意义的错误信息在finally中释放资源避免空的except块常见异常汇总以下表格汇总了 Python 编程中常见的异常类型、触发场景及典型示例便于快速查阅和诊断。异常类型触发场景典型示例处理建议SyntaxError代码不符合 Python 语法规则print(hello # 缺少右括号检查括号、引号、冒号等语法符号是否配对IndentationError缩进不正确属于 SyntaxError 子类def foo(): print(indented wrong)统一使用空格或制表符保持同一代码块缩进一致NameError引用未定义的变量、函数或模块print(undefined_var)检查变量名拼写确认变量是否在作用域内定义TypeError操作或函数应用于不兼容类型的对象hello 123检查操作数类型必要时使用类型转换如str()、int()ValueError传入参数类型正确但值不合法int(abc)验证输入数据的有效性使用try-except捕获并提示IndexError序列列表、元组、字符串索引超出范围lst [1,2,3]; print(lst[5])访问前检查序列长度使用len()判断边界KeyError字典中访问不存在的键d {a:1}; print(d[b])使用dict.get(key, default)或先检查key in dictFileNotFoundError尝试打开不存在的文件open(missing.txt, r)检查文件路径是否正确或使用os.path.exists()预先判断ZeroDivisionError除法或取模运算中除数为零10 / 0对除数进行非零校验或使用try-except捕获AttributeError对象没有指定的属性或方法lst [1,2]; lst.appendd(3)检查属性/方法名拼写确认对象类型是否支持该操作ImportError / ModuleNotFoundError导入模块失败模块不存在或路径问题import non_existent_module检查模块名拼写、安装情况以及 Python 路径sys.pathKeyboardInterrupt用户按下中断键如 CtrlC在循环或输入等待时按下 CtrlC通常用于优雅退出可在try-except中清理资源MemoryError内存不足无法分配所需对象创建超大型列表或递归过深优化数据结构使用生成器、分块处理或增加系统内存OverflowError数值运算结果超出类型表示范围import math; math.exp(1000)使用更高精度的数据类型如decimal.Decimal或检查运算边界扩展说明多数内置异常都继承自BaseException或Exception可通过try-except捕获。自定义异常应继承Exception类以便与内置异常保持一致的捕获机制。使用except Exception as e:可捕获所有非系统退出的异常但建议根据具体场景捕获特定异常。在开发中结合日志记录logging模块和详细的错误信息能大幅提升调试效率。