2008年12月15日月曜日

改行コード

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
標準のライブラリは大丈夫だと思うが、site-packageにいれているようなものはひどいものがある。

class XMLSchemaFake:^M
# This is temporary, for the benefit of WSDL until the real thing works.^M
def __init__(self, element):^M
self.targetNamespace = DOM.getAttr(element, 'targetNamespace')^M
self.element = element

とかなっていると、fileobj = ile(..., 'rU')で読み込んであげないと改行のところでcompile.parse(fileobj)でエラーになってしまう。

しかしrUで読んでもだめなものがいくつかあった。


  • /usr/lib/python2.4/test/badsyntax_nocaret.py
    そもそもに文法的に正しくないテストコード(failすることを確認するためだと思われる。中身はこれ。

    def f(x):
    [x for x in x]=x


  • ファイルの終わりにspaceだけからなる行が存在していて、おかしくなっている。vimで開くとnoeolとかいわれる。

    • /usr/lib/python2.4/site-packages/yumgui/__init__.py

    • /usr/lib/python2.4/site-packages/yumgui/callbacks.py

    • /usr/lib/python2.4/site-packages/MoinMoin/_tests/test_pysupport.py

    • /usr/lib/python2.4/site-packages/testgears/command.py

    • /usr/lib/python2.4/site-packages/testgears/tests/test_collection.py

    • /usr/lib/python2.4/site-packages/turbojson/tests/test_sqlalchemy.py



  • ファイルの終わりにtabだけからなる行が存在していて、おかしくなっている。

    • /usr/lib/python2.4/site-packages/sqlobject/include/pydispatch/robustapply.py





このへんかな?

next()
ファイルオブジェクトはそれ自身がイテレータです。すなわち、 iter(f) は (f が閉じられていない限り) f を返します。for ループ (例えば for line in f: print line) のようにファイルがイテレータとして 使われた場合、next() メソッドが繰り返し呼び出されます。 個のメソッドは次の入力行を返すか、または EOF に到達したときに StopIteration を送出します。ファイル内の各行に対する for ループ (非常によくある操作です) を効率的な方法で 行うために、next() メソッドは隠蔽された先読みバッファ を使います。先読みバッファを使った結果として、(readline() のような) 他のファイルメソッドと next() を組み合わせて使うと うまく動作しません。しかし、seek() を使ってファイル位置 を絶対指定しなおすと、先読みバッファはフラッシュされます。

rpm packageするまえにText::FixEOLを通すような元気はあまりないなぁ。作る側でケアしてほしいのだが。

もうちょっと丁寧にみないといけないだろうが、今日はもうここまで。

0 件のコメント: