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 - 未定义的变量?的主要内容,如果未能解决你的问题,请参考以下文章

Python,如果带有变量的语句错误说未定义

Python脚本中的变量未定义

Python GraphQL 变量未定义

python按序解析,变量赋值即定义,变量未定义不可使用

使用未定义的变量作为python中的字典键

如果 __name__ == '__main__' 之后未定义 Python 变量