Python 如何警告我潜在的名称错误?

Python 如何警告我潜在的名称错误?,python,nameerror,Python,Nameerror,下面是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”)。除非您输入n=1,否则口译员不会通知错误(NameError)甚至警告 如何在运行时通知我这一点?Python无法在运行时之前通知您

下面是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”)。除非您输入
n=1
,否则口译员不会通知
错误(NameError)
甚至警告


如何在运行时通知我这一点?

Python无法在运行时之前通知您,因为有多种方法可以在该行出现之前将“dolar”插入到符号表中,而Python在实际尝试运行该行之前无法检测您是否已经这样做。正如Josh Lee所说,最好的办法是制作一个测试套件(至少)测试代码的每一行。

Python无法在运行时提前通知您,因为有一些方法可以在代码行出现之前将“dolar”插入到符号表中,在Python实际尝试运行该行之前,它无法检测您是否已经这样做了。正如Josh Lee所说,您最好的选择是制作一个测试套件(至少)测试代码的每一行。

将此报告为
E:3:未定义变量“dolar”
,并提供许多有用的风格提示

Python本身不能出现这种编译时错误,因为如果不运行导致该名称的代码,它无法真正判断您不是在动态创建该名称。(Pylint会认为这是一个错误,即使你碰巧这样做,这是很好的,因为如果你编写代码,你应该让它得分很差……)< /P> < P>将报告为<代码> E:3:未定义的变量“DOLAR”<代码>,以及给你很多有用的风格提示。 Python本身不能出现这种编译时错误,因为如果不运行导致该名称的代码,它无法真正判断您不是在动态创建该名称。(Pylint会认为这是一个错误,即使你碰巧这样做,这是很好的,因为如果你编写代码,你应该让它得分很差……)< /P> < P>使用PyLnt:< /P>
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'
使用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'

另外,您调用的
map
不正确且不必要:
n,dollar,euro=input.split()
downvorters:这是一个合理的问题。仅仅因为有一个角落的情况下,
dolar
是有意的和正确的,并不意味着有一个工具来吸引你的注意力是没有用的。你到底希望这段代码做什么?用户输入的内容是什么,您希望输出的内容是什么?此外,您调用
map
时不正确且不必要:
n,dollar,euro=input.split()
downvoverts:这是一个合理的问题。仅仅因为有一个角落的情况下,
dolar
是有意的和正确的,并不意味着有一个工具来吸引你的注意力是没有用的。你到底希望这段代码做什么?用户输入是什么,您期望输出是什么?