私は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. PHPのスクリプトタイムアウトを防ぐためのusleep
- 5. 冗長+同一のeコマース注文を防ぐためのページデザイン
- 6. Pythonでの特殊文字の自動エスケープを防ぐ方法
- 7. 文書を印刷するためのコマンドラインプログラム?
- 8. グラフを印刷するためのフラッシュコンポーネント
- 9. 式を印刷するためのライブラリ
- 10. すぐに構造体名を印刷
- 11. 自己のプロジェクトのために非文字列
- 12. APMでスタックオーバーフローを防ぐため
- 13. 印刷したい印刷
- 14. pyodbcのSQLの印刷文
- 15. のpython:印刷されたXML文書
- 16. がデータベースに入力同じデータにユーザーを防ぐため、ユーザーを防ぐために(アンドロイド)
- 17. 印刷された文書の印刷プレビューを作成する方法
- 18. awkでの丸め印刷
- 19. 文字列の印刷
- 20. 独自のレイヤーで地図を印刷
- 21. 特定の単語や文字で始まり、終わるテキストファイルの文章を印刷しますか?
- 22. LogcatのGC_CONCURRENT文を防ぐ方法
- 23. 追加されたイベントハンドルによるメモリリークを防ぐための予防策
- 24. サファリのためのJavaScriptを開発中 - 死のボールを防ぐ
- 25. 重複したエントリを防ぐためのDatagrid検証
- 26. タイピングエラーを防ぐための短いコードのチェックサムの選択
- 27. 2番目のインスタンスを防ぐためのC#ミューテックスの問題
- 28. コンソール出力の列の文字列にテキストを印刷するためのライブラリ
- 29. 文字を印刷する*
- 30. codeigniterのSQLインジェクションを防ぐための基本的な知識
あなたは自分でそれをしないのはなぜテキストエディタ? – Blender
ctrl fまたはctrl rをテキストエディタで使用しています.... –
テキストエディタはコード実行時にコマンドを実行できません。 – captainandcoke