Jue*_*Xie 0 python nameerror ponyorm
我的程序有一个奇怪的问题,异常堆栈是:
*except Exception, cause: raise ExprEvalError(src, cause)
ExprEvalError: date_after raises NameError: name 'date_after' is not defined*
Run Code Online (Sandbox Code Playgroud)
所以代码是:
@staticmethod
def get_recently(days_before=30):
delta = timedelta(days=days_before)
date_after = datetime.now() - delta
return list(Version.select(lambda v:v.create_time>date_after).order_by(desc(Version.create_time))[:])
Run Code Online (Sandbox Code Playgroud)
ORM框架是Pony,但我认为它与此无关.代码可以在其他PC上正常运行.
你能告诉我这是什么问题吗?谢谢.
PS
Pony ORM作者在这里.乐高Stormtroopr已经回答了如何解决问题的问题,但是既然你也想知道这个bug的原因,我会在这里描述一下.您可以订阅我们的邮件列表,并在那里询问任何与Pony相关的问题.
简短回答:在0.4.8版本中,我们改进了@cut_traceback装饰器,这一改变打破了一些不相关的功能.
详细解答:
date_after在您的代码中),Pony检查相应的堆栈帧.@cut_traceback装饰器包装的公共API的一部分.当Pony用于交互模式时,此装饰器会删除一些内部回溯线.之前一些用户报告说,回溯输出对他们来说过于恐吓,@cut_traceback并使回溯输出更"用户友好".@cut_traceback装饰有一个缺点-它隐藏功能的真正的争论,取而代之他们*args和**kwargs.如果IDE向开发人员显示功能签名,这可能会很烦人.因此,我们用@cut_traceback改进的版本替换了装饰器,这使得装饰功能的签名保持完整.@cut_traceback装饰器使用了一个堆栈帧.因此,应修改从堆栈帧中获取用户参数的所有Pony函数,以便检查另一个堆栈帧.但我们忘了在0.4.8版本中这样做希望我回答你的问题:)