ページ更新: 2006-04-07 (金) (4636日前)

2005-04-04

LastModifiedMacroに関するメモ。いまんとこ未整理。

http://trac-hacks.org/wiki/LastModifiedMacro

Trac 0.9.4でLastModified Macroを使うと、以下のエラーが出る。 Windows XP SP2, Solaris 10/x86で再現した。

Error: Macro LastModified(WikiStart) failed

 not all arguments converted during string formatting

該当するチケットは次の2つ?

trac.iniでログを残すよう設定

[logging]
log_file = trac.log
log_level = INFO
log_type = file

ログを採取。

2006-04-05 00:31:12,842 Trac[macros] ERROR: Wiki macro LastModified failed (not all arguments converted during string formatting)
Traceback (most recent call last):
  File "C:\Python23\Lib\site-packages\trac\wiki\macros.py", line 437, in render_macro
    return module.execute(req and req.hdf, content, self.env)
   File "c:\appdata\trac\hamatani\wiki-macros\LastModified.py", line 60, in execute
    "ORDER BY version DESC LIMIT 1", page_name)
  File "C:\Python23\lib\site-packages\trac\db.py", line 217, in execute
    sql = sql % (('?',) * len(args))
TypeError: not all arguments converted during string formatting

LastModified.pyの60行目の処理が原因?

エラーメッセージ "not all arguments converted during string formatting" をGoogleで検索。

Problem with mixing doctest with gettext _()
http://mail.python.org/pipermail/python-list/2004-February/209368.html

によると 「sys.stdout.write("%r\n" % a)」を「sys.stdout.write("%r\n" % (a,))」に変えろ、とのこと。 これって「シーケンス(list、tuple)が必要なので、明示的にtupleを作っている」?

試しにcursor.executeの引数page_nameをtupleに入れてみたところ、エラーは出なくなった。 でも何でこうなるのか調査してない。(page_nameの実際の型を見ればすぐにわかるのだろうが‥‥)

修正前:

    cursor.execute("SELECT author, time FROM wiki WHERE name = %s "
            "ORDER BY version DESC LIMIT 1", page_name)

修正後:

    cursor.execute("SELECT author, time FROM wiki WHERE name = %s "
            "ORDER BY version DESC LIMIT 1", (page_name,))

2006-05-22

相変わらず、page_name の参照先の型は調べてないが、どっちかというとこう?

>>> page_name = (1,2)
>>> print "%s" % page_name

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in -toplevel-
    print "%s" % page_name
TypeError: not all arguments converted during string formatting

>>> print "%s" % (page_name,)
(1, 2)

>>> print "%s" % page_name[0]
1

2006-07-21 Changeset 657 - Trac Hacks - Plugins Macros etc. - Tracで修正された。