You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Code Workbooks Transform中使用cProfile遇re未定义错误的疑问

解决cProfile.run中NameError: name 're' is not defined的问题

你遇到的问题根源在于cProfile.run()的执行机制:它会为传入的字符串语句创建全新的全局/局部命名空间,你在外部代码里导入的re模块并不在这个新命名空间中,所以执行字符串语句时会找不到re。

可行的解决方案:

  • 方案1:将导入逻辑嵌入待执行字符串
    把import re直接放到cProfile.run()的字符串参数里,让它在目标命名空间中完成导入:

    import cProfile
    cProfile.run('import re; re.compile("foo|bar")')
    
  • 方案2:使用runctx()传入当前命名空间
    用cProfile.runctx()替代run(),手动把当前代码的全局和局部命名空间传递进去,这样待执行语句就能访问到已导入的re:

    import cProfile
    import re
    cProfile.runctx('re.compile("foo|bar")', globals(), locals())
    
  • 方案3:封装成函数再分析
    把要性能分析的代码封装成独立函数,然后分析函数调用——这种方式更清晰,也能避免命名空间问题:

    import cProfile
    import re
    
    def compile_pattern():
        re.compile("foo|bar")
    
    cProfile.run('compile_pattern()')
    

至于你提到其他transform里re能正常使用,是因为那些场景下代码都是在当前命名空间直接执行,没有像cProfile.run()这样隔离出独立的执行上下文,所以不会出现命名找不到的问题。

内容的提问来源于stack exchange,提问作者Chris A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:22:41