Python:为何从cron调用时会收到Babel的这个异常?

0 投票
1 回答
2289 浏览
提问于 2025-04-16 10:50

我在使用Python的Babel包时遇到了一个异常。当我的脚本调用Babel的一个函数时就会出现这个问题。奇怪的是,当我在命令行运行它时,一切正常。但是当我通过cron(定时任务)运行时,就会出现错误。看起来这个问题可能和某些环境设置或地区设置有关,或者是缺少这些设置。

File "/home/myproj/lib/python2.6/Babel-0.9.5-py2.6.egg/babel/dates.py", line 508, in format_datetime
       return parse_pattern(format).apply(datetime, locale)
     File "/home/myproj/lib/python2.6/Babel-0.9.5-py2.6.egg/babel/dates.py", line 702, in apply
       return self % DateTimeFormat(datetime, locale)
     File "/home/myproj/lib/python2.6/Babel-0.9.5-py2.6.egg/babel/dates.py", line 699, in __mod__
       return self.format % other
     File "/home/myproj/lib/python2.6/Babel-0.9.5-py2.6.egg/babel/dates.py", line 724, in __getitem__
       return self.format_month(char, num)
     File "/home/myproj/lib/python2.6/Babel-0.9.5-py2.6.egg/babel/dates.py", line 793, in format_month
       return get_month_names(width, context, self.locale)[self.value.month]
     File "/home/myproj/lib/python2.6/Babel-0.9.5-py2.6.egg/babel/dates.py", line 87, in get_month_names
       return Locale.parse(locale).months[context][width]
   AttributeError: 'NoneType' object has no attribute 'months'

更新

从命令行调用时,地区设置是en_US,而从cron调用时则是None。我该如何在cron调用时设置这个地区呢?

另外,我不知道这是否重要,但调用Babel的脚本是一个自定义的django-admin命令。

1 个回答

1

Babel无法检测到默认的地区设置(LC_TIME),因为cron这个工具设置的环境变量比较少。

你可以手动设置这个地区,比如用babel.dates.LC_TIME = Locale.parse('en_US')。另外,看看Babel 0.9.6版本,那里对默认地区检测做了一些修复。

撰写回答