Подтвердить что ты не робот

Pythonic способ проверить, существует ли что-то?

Это довольно простой, но я был кодированием и начал задаваться вопросом, существует ли питонический способ проверить, нет ли чего-то. Вот как я это делаю, если это правда:

var = 1
if var:
    print 'it exists'

но когда я проверяю, что что-то не существует, я часто делаю что-то вроде этого:

var = 2
if var:
    print 'it exists'
else:
    print 'nope it does not'

Похоже на отходы, если все, о чем я забочусь, это способ проверить, нет ли чего-то другого без него?

4b9b3361

Ответ 1

Стиль LBYL, "посмотрите, прежде чем прыгать":

var_exists = 'var' in locals() or 'var' in globals()

Стиль EAFP, "проще просить прощения, чем разрешение":

try:
    var
except NameError:
    var_exists = False
else:
    var_exists = True

Предпочитайте второй стиль (EAFP) при кодировании в Python, поскольку он, как правило, более надежный.

Ответ 2

Я думаю, вы должны быть осторожны с вашей терминологией, существует ли что-то, и что-то оценивает False, это две разные вещи. Предполагая, что вы хотите последнего, вы можете просто сделать:

if not var:
   print 'var is False'

Для первого было бы менее элегантно:

try:
   var
except NameError:
   print 'var not defined'

Я собираюсь сделать прыжок и рискнуть, однако, что все, что заставляет вас хотеть проверить, определена ли переменная, возможно, может быть решена более элегантно.

Ответ 3

Чтобы проверить, был ли var определен:

var = 2

try: 
    varz
except NameError:
    print("No varz")

Чтобы проверить, нет ли этого параметра /False

if varz is None

... или

if not varz

Ответ 4

Если это словарь, вы можете иметь

mydict['ggg'] = ''   // doesn't matter if it is empty value or not.
if mydict.has_key('ggg'):
   print "OH GEESH"

Однако has_key() полностью удаляется из Python 3.x, поэтому путь Python заключается в использовании in

'ggg' in mydict     # this is it!
# True if it exists
# False if it doesn't

Вы можете использовать in для кортежа, списка и установить также.


Конечно, если переменная не была определена, вам придется поднять исключение молча (просто поднимите любое исключение... пусть оно пройдет), если исключение не то, что вы хотите видеть (что полезно для многие приложения, вам просто нужно зарегистрировать исключение.)


Всегда безопасно определять переменную перед ее использованием (вы будете запускать "назначение перед локальной ссылкой", что означает, что "var не находится в области видимости" на простом английском языке). Если вы делаете что-то с запросом, вероятность того, что вы захотите иметь словарь и проверить, существует ли ключ или нет, используйте in.

Ответ 5

Как насчет отрицания?

if not var:
    print 'nope it does not'

Хотя это означает, что var является false/none и будет взорваться, если var не определен.

Чтобы узнать, определен ли var:

try:
    var
except NameError:
    print 'not defined'

Ответ 6

if not var:
    #Var is None/False/0/

if var:
    #Var is other then 'None/False/0'

в Python, если varibale имеет любое значение из None/False/0, тогда условие If var не будет выполнено...

а для других объектов он вызовет __nonzero__ pythonic метод, который может возвращать True или False в зависимости от его функциональности.