Python - неопределенная переменная? - PullRequest
1 голос
/ 24 октября 2010

Есть ли в Python неопределенные переменные / режим отладки, которые будут выводить уведомление / предупреждение?

PHP позволяет вам изменять error_reporting для включения предупреждений об уведомлении, что означает выполнение

<?php
echo $foo;

будет выдавать «неопределенную переменную foo в строке 2 .......

есть ли в Python что-то похожее?

У меня была ошибка, когда я делал

db.connect

вместо

db.connect()

и я надеялся, что python сгенерирует неопределенную переменную connect ...

Можете ли вы повысить уровень сообщений об ошибках или аналогичный в python?

Ответы [ 4 ]

9 голосов
/ 24 октября 2010

Python жалуется на неопределенные переменные, без каких-либо изменений в системе предупреждений :

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>
3 голосов
/ 24 октября 2010

Это не неопределенная переменная.Вы ссылаетесь на существующий метод connect - если бы его не было, вы бы получили NameError, как показывает MYYN - но вы его не называете.Это совершенно верно в отношении языка - на самом деле, такое поведение (когда оно является частью более крупного выражения) иногда чрезвычайно полезно.Но не говоря о том, что это бессмысленно, конечно.Я предполагаю, что инструменты статического анализа, такие как pylint или PyChecker , могут жаловаться на это (хотя я не уверен, я редко делаю такую ​​ошибку), и использование их не повредит в любом случае.

0 голосов
/ 24 октября 2010

Можно использовать такой инструмент, как Pylint http://www.logilab.org/project/pylint

Пример

class A(object):
    def fun():
        return None

a = A()
a.fun

Предупреждение фрагмента Pylint:

R:  2:A.fun: Method could be a function
0 голосов
/ 24 октября 2010

Насколько я знаю, в Python такой опции нет.Однако существуют такие инструменты, как PyChecker , которые помогут вам найти ошибки, которые на других языках обнаруживаются компилятором.

...