Python中Try/Except失效及类方法未执行的问题求助
问题分析与修复
核心问题1:计数器被耗尽
你的self.x_counter在find_a方法里被循环减到0了,等到调用find_power时,while self.x_counter > 0的条件直接不成立,导致这个方法完全没执行。解决办法是复制一份计数器,不要直接修改实例的self.x_counter,或者在每个方法里重新统计x的数量。
核心问题2:全局变量依赖
你用了全局的lst,这会让代码耦合性高,不如把列表存为类的实例属性,更符合面向对象的设计逻辑。
问题3:Try-Except的不当使用
用try-except捕获索引越界虽然能运行,但会掩盖其他可能的错误(比如类型错误),直接用条件判断检查索引是否合法更稳妥:
- 检查前一位:
counter - 1 >= 0 - 检查后一位:
counter + 1 < len(self.lst)
修复后的代码
graph_equation = input("Enter graph function: ") print(*graph_equation) class Analyze(): def __init__(self, equation): # 把方程转为列表,作为实例属性 self.lst = list(equation) # 统计x的数量 self.x_count = sum(1 for char in self.lst if char == 'x') def find_a(self): # 复制计数器,不修改原实例属性 remaining_x = self.x_count x_passed = 0 counter = 0 while remaining_x > 0: if self.lst[counter] == 'x': remaining_x -= 1 x_passed += 1 # 检查前一位是否合法 if counter - 1 >= 0: prev_char = self.lst[counter-1] if prev_char in ('+', '-'): print(f"x{x_passed} is multiplied by 1") else: print(f"x{x_passed} is multiplied by {prev_char}") else: # 没有前一位,说明x在开头 print(f"x{x_passed} is multiplied by 1") counter += 1 print(self.lst) def find_power(self): # 重新复制计数器 remaining_x = self.x_count x_passed = 0 counter = 0 while remaining_x > 0: if self.lst[counter] == 'x': remaining_x -= 1 x_passed += 1 # 检查后一位是否合法 if counter + 1 < len(self.lst): next_char = self.lst[counter+1] if next_char in ('+', '-'): print(f"x{x_passed} has the power of 1") else: print(f"x{x_passed} has the power of {next_char}") else: # 没有后一位,说明x在结尾 print(f"x{x_passed} has the power of 1") counter += 1 # 实例化时传入方程 equation_analyzer = Analyze(graph_equation) equation_analyzer.find_a() equation_analyzer.find_power()
额外优化点
- 类名改为
Analyze(符合Python大驼峰命名规范) - 用
list(equation)直接把字符串转成列表,省去手动循环append的步骤 - 用
sum(1 for char in ...)统计x的数量,代码更简洁 - 用f-string格式化输出,可读性更强
内容的提问来源于stack exchange,提问作者Raed Mardom
相关产品推荐
相关产品推荐

