2010-10-24 2 views
1

Есть ли у python какой-то неопределенный режим переменной/отладки, который выводит уведомление/предупреждение?python - неопределенная переменная?

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

<?php 
echo $foo; 

выбросит «Неопределенная переменная Foo в строке 2 .......

делает питона есть что-то подобное?

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

db.connect 

вместо

db.connect() 

и я надеялся питон бы бросить неопределенная переменная подключения ...

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

+0

К счастью для нас, это не исключение. В каких обстоятельствах вы не получили ошибку? В Python вы всегда можете создать новый атрибут (например, db.connect = 1), это могло бы обмануть вас. –

ответ

9

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> 
0

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

3

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

0

Вы можете использовать инструмент как 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