以下是Python脚本的示例:
n, dollar, euro = map(input().split())
if n == 1:
print(dolar / euro) # Note the typo, 'dolar' vs. 'dollar'
else:
print(euro / dollar)
我犯了一个错误(“dolar”和一个'l')。除非您输入error(NameError)
,否则口译员不会通知n = 1
甚至是警告。
如何在运行时通知我?
答案 0 :(得分:7)
pylint会将此报告为E: 3: Undefined variable 'dolar'
,并为您提供大量有用的样式提示。
Python本身不能像这样的编译时错误,因为它无法真正告诉你,如果不运行导致它的代码,你就不会动态创建该名称。 (即使你碰巧这样做,Pylint会认为这是一个错误,这很好,因为如果你编写类似的代码,你应该得到它得分很差......)
答案 1 :(得分: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'
答案 2 :(得分:0)
Python无法在运行时之前通知您,因为在该行发生之前有一些方法可以将“dolar”插入到符号表中,并且Python无法检测您是否已经这样做直到它实际尝试运行这条线。正如Josh Lee所说,你最好的办法就是建立一个测试套件(至少)练习你代码的每一行。