python - 未定义的变量?
Posted
技术标签:
【中文标题】python - 未定义的变量?【英文标题】:python - undefined variable? 【发布时间】:2011-04-29 21:59:22 【问题描述】:python 是否有一些未定义的变量/调试模式会输出通知/警告?
php 允许您修改 error_reporting 以打开通知警告,这意味着正在做
<?php
echo $foo;
将在第 2 行抛出一个“未定义的变量 foo.......”
python有类似的吗?
我在做的地方有一个错误
db.connect
而不是
db.connect()
我希望 python 会抛出一个 未定义的变量连接...
你能在 python 中提高错误报告级别或类似级别吗?
【问题讨论】:
幸运的是,它确实引发了异常。在什么情况下您没有收到错误?在 Python 中,您始终可以创建新属性(例如 db.connect = 1),这可能会欺骗您。 【参考方案1】:Python 抱怨未定义的变量,没有对其warning system 进行任何调整:
h[1] >>> print x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
在你的情况下db.connect
实际上有一个值,即一个函数对象。所以你的连接不是未定义的。
h[1] >>> def hello(): pass
...
h[1] >>> x = hello
h[1] >>> print x
<function hello at 0x100461c80>
【讨论】:
【参考方案2】:据我所知,Python 中没有这样的选项。不过,也有像 PyChecker 这样的工具,它可以帮助您找到其他语言中被编译器捕获的错误。
【讨论】:
【参考方案3】:这不是一个未定义的变量。您参考现有方法connect
- 如果没有,您会得到一个NameError
,如 The MYYN 所示 - 但您没有调用它。就语言而言,这是完全有效的——事实上,这种行为(当成为更大表达式的一部分时)有时非常有用。但更不用说,这当然是没有意义的。我想像 pylint 或 PyChecker 这样的静态分析工具可能会抱怨这一点(不过我不确定,我很少犯这种错误)并且无论如何使用它们都不会受到伤害。
【讨论】:
【参考方案4】:你可以使用类似pylint的工具http://www.logilab.org/project/pylint
例子
class A(object):
def fun():
return None
a = A()
a.fun
Pylint sn-p 警告:
R: 2:A.fun: Method could be a function
【讨论】:
以上是关于python - 未定义的变量?的主要内容,如果未能解决你的问题,请参考以下文章