2

次のいずれかの方法はありますか:

  • -tデフォルトで常に有効になっている (一貫性のないタブの使用について警告する)
  • 起動時にプログラムで有効にできるようにする (例:sitecustomize.pyモジュール内)

組み込みの Python でも機能する必要があります (そのため、エイリアシングpythonや同様のソリューションは役に立ちません)。を使用すると、sitecustomize.py組み込みの Python インスタンスにフックできるため、これは適切な場所のように思えます。

warningsこのモジュールはこの警告をオンにする方法を提供すると思っていましたが、何も表示されません。

参考のため:

usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
...
-t     : issue warnings about inconsistent tab usage (-tt: issue errors)
...

これを行う方法について何か提案はありますか?

ありがとう。

4

2 に答える 2

0

そのようなオプションはありません。

次のいずれかを実行できます

  • インタプリタ呼び出しを bash スクリプト内にラップする
  • エイリアスを定義する
于 2013-01-22T16:13:52.657 に答える
0

私がたどり着いた唯一の解決策は、インポート フックに関するものでした。これは私がやりたいと思っていたことを少し超えていますが、それらがどのように機能するかを学ぶための良い口実だと感じました.

このソリューションは、「一貫性のない空白」をチェックせず、タブをチェックするだけですが、簡単に拡張できます。

結果は次のとおりです。

import sys
import imp
import warnings


class TabCheckImporter(object):

    """Finder and loader class for checking for the presence of tabs

    """

    def find_module(self, fullname, path=None):
        """Module finding method

        """
        # Save the path so we know where to look in load_module
        self.path = path
        return self

    def load_module(self, name):
        """Module loading method.

        """
        # Check if it was already imported
        module = sys.modules.get(name)
        if module is not None:
            return module

        # Find the module and check for tabs
        file_, pathname, description = imp.find_module(name, self.path)
        try:
            content = file_.read()
            tab = content.find("\t")
            if tab > -1:
                lineno = content[:tab].count("\n") + 1
                warnings.warn_explicit(
                        "module '{0}' contains a tab character".format(name),
                        ImportWarning,
                        pathname,
                        lineno)
        except Exception as e:
            warnings.warn("Module '{0}' could not be checked".format(name),
                          ImportWarning)

        # Import the module
        try:
            module = imp.load_module(name, file_, pathname, description)
        finally:
            if file_:
                file_.close()

        sys.modules[name] = module
        return module


# Register the hook
sys.meta_path = (sys.meta_path or []) + [TabCheckImporter()]

# Enable ImportWarnings
warnings.simplefilter("always", ImportWarning)

このファイルのインポート (->|リテラル タブに置き換えます):

# File: test_tabbed.py
if True:
->| print "This line starts with a tab"

次の出力が得られます。

$ python -c 'import hook; import test_normal; import test_tabbed;'
test_tabbed.py:3: ImportWarning: module 'test_tabbed' contains a tab character
  print "This line starts with a tab"
于 2013-02-03T03:03:16.503 に答える