Python代码在VS Code报错但LeetCode可运行,求解决方案
为啥会报错?
UnboundLocalError的核心原因有两个:
- 变量引用在赋值之前:如果你的代码里先拿
shortest_char来用(比如循环它的长度),之后才给它赋值(比如shortest_char = min(strs, key=len)),Python会把这个变量判定为局部变量,但引用时它还没被赋值,直接触发错误。 - 没处理空输入:要是你在VS Code里测试了空字符串列表(比如
strs = []),执行min(strs, key=len)会直接报错,导致shortest_char从来没被赋值过,后续代码一引用它就触发错误。
怎么修?
针对上面两种情况,直接调整代码即可:
- 调整变量顺序,先赋值再使用:把找最短字符串的代码放在所有用到它的逻辑前面,同时加上空输入判断:
def longestCommonPrefix(strs): # 先处理空输入,直接返回空串 if not strs: return "" # 先确定最短字符串,再开始循环判断 shortest_str = min(strs, key=len) for i in range(len(shortest_str)): current_char = shortest_str[i] for s in strs: if s[i] != current_char: return shortest_str[:i] return shortest_str
- 强制拦截空输入:不管测试什么场景,先判断输入数组是否为空,避免后续代码因为没有有效输入导致变量未赋值。
为啥LeetCode能跑VS Code不行?
根本不是平台有差异,而是测试输入不一样:
LeetCode的测试用例严格遵循题目约束,第14题的官方测试用例里,输入的字符串数组至少包含一个元素,不会出现空数组的情况,所以不会触发空输入导致的变量未赋值问题;而你在VS Code里可能自己测试了空数组这种边界场景——要是是变量引用顺序的问题,其实LeetCode也会报错,大概率是你测了LeetCode没覆盖的空输入场景。Python的作用域规则是统一的,不存在平台特殊处理。
内容的提问来源于stack exchange,提问作者chaichai 1234
相关产品推荐
相关产品推荐

