相同输入主程序运行正常,对应unittest单元测试执行时挂死无响应
问题根因
核心原因是syntax.py的全局作用域下存在未包裹在if __name__ == '__main__'判断中的阻塞执行逻辑:
- 单独运行
syntax.py时,这部分逻辑会按预期执行,输入C可快速返回结果 - 当在单元测试中执行
from syntax import *导入模块时,Python会先运行syntax.py全局作用域下的所有可执行代码,阻塞逻辑会在导入阶段直接触发,导致还未进入单元测试环节就已经挂死。
你提到单独调用CheckSyntax('C')可正常返回,说明函数本身无死循环问题,基本可确定为导入阶段的阻塞导致。
解决方法
打开syntax.py文件,将所有读取输入、测试调用、直接执行的业务代码全部移入if __name__ == '__main__'代码块中,调整后的syntax.py结构参考如下:
# 函数定义部分保留在全局作用域 def CheckSyntax(input_str): # 你原有的语法检查逻辑不变 pass # 其他工具函数定义也保留 # 所有直接执行的代码全部放到下面的代码块中 if __name__ == '__main__': # 比如你原来的读取用户输入、调用CheckSyntax输出结果的代码都放在这里 input_content = input() print(CheckSyntax(input_content))
调整完成后重新运行单元测试即可正常执行。
内容的提问来源于stack exchange,提问作者Kristi Francis
相关产品推荐
相关产品推荐

