1

Python スクリプトの例を次に示します。

n, dollar, euro = map(input().split())
if n == 1:
   print(dolar / euro)  # Note the typo, 'dolar' vs. 'dollar'
else:
   print(euro / dollar)

間違えました(「l」が 1 つ付いた「ドル」)。入力しない限り、インタープリターはerror(NameError)警告を通知しませんn = 1

実行時にそれをどのように通知できますか?

4

3 に答える 3

7

pylintはこれを として報告しE: 3: Undefined variable 'dolar'、多くの便利なスタイルのヒントを提供します。

Python 自体は、このコンパイル時エラーのようなものを作ることはできません。なぜなら、その名前につながるコードを実行しないと、その名前を動的に作成していないことを実際に判断できないからです。(Pylintは、たまたまそれを行ったとしてもエラーと見なします。これは問題ありません。そのようなコードを記述した場合、スコアが低くなるに値するためです...)

于 2012-08-23T17:32:17.310 に答える
3

Pylint を使用します。

sucmac:~ ajung$ /tmp/bin/pylint ou.py 
No config file found, using default configuration
************* Module ou
W:  3,0: Bad indentation. Found 3 spaces, expected 4
W:  5,0: Bad indentation. Found 3 spaces, expected 4
C:  1,0: Missing docstring
C:  1,0: Invalid name "n" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:  1,3: Invalid name "dollar" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:  1,11: Invalid name "euro" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
W:  1,18: Used builtin function 'map'
W:  1,22: Used builtin function 'input'
E:  3,9: Undefined variable 'dolar'
于 2012-08-23T17:32:51.693 に答える
0

その行が発生する前にシンボルテーブルに「ドル」を挿入する方法があり、実際に行を実行しようとするまでPythonはそれを行ったかどうかを検出できないため、Pythonは実行前に通知できません。Josh Lee が言ったように、最善の策は、(少なくとも) コードのすべての行を実行するテスト スイートを作成することです。

于 2012-08-23T17:30:50.693 に答える