私はprint文の代わりにそれに取り組んでいるpythonプロジェクトを持っています。私は開発中に情報を出力し、生産中に情報を記録することができます。しかし、私はしばしばこれを忘れて、誤ってコードにprintステートメントを入れます。とにかくPythonプログラムに独自のソースを読み込ませ、exit()が関数say()の外にあるprintステートメントを見つけたらそれはありますか?印刷の文章を防ぐための自己スキャンコード
答えて
これはast
モジュールを使用して行うことができます。
from __future__ import print_function
print = None
あなたsay()
機能と一緒にこれを置く、あなたのような何かを行うことができます。次のコードは、の将来のPython 3またはPython 2を使用している場合のために、print
ステートメントとprint()
関数の呼び出しを検出します。
import ast
class PrintFinder(ast.NodeVisitor):
def __init__(self):
self.prints_found = []
def visit_Print(self, node):
self.prints_found.append(node)
super(PrintFinder, self).generic_visit(node)
def visit_Call(self, node):
if getattr(node.func, 'id', None) == 'print':
self.prints_found.append(node)
super(PrintFinder, self).generic_visit(node)
def find_print_statements(filename):
with open(filename, 'r') as f:
tree = ast.parse(f.read())
parser = PrintFinder()
parser.visit(tree)
return parser.prints_found
print 'hi'
for node in find_print_statements(__file__):
print 'print statement on line %d' % node.lineno
この例の出力は次のとおりです。ライン上の
ハイテク
print文ライン上の24
print文26
これはお勧めしませんが、実際には、print
ステートメントを再定義することでPythonインタプリタにエラーが発生する可能性があります。
のPython 3を使用している場合は、単にあなたのコードの先頭に/上部付近にこれを置く:
print = None
任意のprint
文がある場合は、あなたがTypeError: 'NoneType' object is not callable
エラーが発生します。
Python 2.xを使用している場合は、別のanswerで提案されているアイデアを使用して、Python 2.xがオーバーライド可能なprint文を持つようにすることができます。
print_original = print
print = None
def say(data):
print = print_original
# Your current `say()` code here, such as:
print(data) # Could just use `print_original` instead.
# Redefine print to make the statement inaccessible outside this function.
print = None
'None'は呼び出すことができないので、新しい' print' "関数"が呼び出されたときに例外が発生します。 OPが望んでいるものではありません。特に、コードが実際に実行されたときにだけ壊れるからです。 – ThiefMaster
OPは、印刷文が出たら、プログラムがexit()するようにします。例外をスローすると、プログラムが終了します。しかし、これは最初は非常に望ましいことではないと私は同意するが、それは私が推測する誰かのために働くことができる。 –
私にとっては、彼がソース全体をチェックして、実行中に*いくつかの点でそれをしないと思うように思えます。 – ThiefMaster
- 1. 文字列を印刷するための自己完結型Cルーチン
- 2. 値を印刷中に防ぐには、キーのインデックスを印刷する - PHP
- 3. 文章中の単語を後方に印刷するための再帰
- 4. 自己オブジェクトの検証を防ぐ方法
- 5. 複数のページにまたがる行を防ぐhtmlテーブルの印刷
- 6. Jupyterがロードされた行列をオクターブカーネルで印刷するのを防ぐ
- 7. pygameで押されたキーのスキャンコードを印刷/検出する方法は?
- 8. 8086アセンブリで半分の文章を印刷
- 9. PHPのスクリプトタイムアウトを防ぐためのusleep
- 10. 冗長+同一のeコマース注文を防ぐためのページデザイン
- 11. 単語検索で文章を印刷する
- 12. 予め印刷された書式/文房具へのデータの印刷
- 13. ロガーが同じ情報を何度も印刷するのを防ぐには?
- 14. Xcode - 自動フォーマットエラーを防ぐ
- 15. Pythonでの特殊文字の自動エスケープを防ぐ方法
- 16. Cで文字を印刷するためのテキストの取得
- 17. 軸の自動スケーリングを防ぐには?
- 18. APMでスタックオーバーフローを防ぐため
- 19. 自己のプロジェクトのために非文字列
- 20. Pythonどのような単語がある文章を印刷するには?
- 21. のJava自動印刷
- 22. 文書を印刷するためのコマンドラインプログラム?
- 23. グラフを印刷するためのフラッシュコンポーネント
- 24. バーコードを印刷するためのベストプラクティス
- 25. 式を印刷するためのライブラリ
- 26. ユニットテストPythonの文字列の切り詰めを防ぐ方法
- 27. 防ぎ、自己のコールバック観測されたコレクションを変更
- 28. 埋め込みPDFを防ぐ<object>は印刷ダイアログを開きません
- 29. すぐに構造体名を印刷
- 30. 印刷文の構文エラー
あなたは自分でそれをしないのはなぜテキストエディタ? – Blender
ctrl fまたはctrl rをテキストエディタで使用しています.... –
テキストエディタはコード実行時にコマンドを実行できません。 – captainandcoke