[基础]Python判断变量是否定义
2016-06-01 本文已影响0人
Coffen
判断变量是否定义
参考:
python中检测某个变量是否有定义
dir介绍
你是否会碰到如下情形:
# 如果C有值就取C,否则自定义为8
a = 8 if not c else c
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
a = 8 if not c else c
NameError: name 'c' is not defined
呵呵,结果,发现c未定义,not defined,不是None
碰到这种问题该怎么解决呢?
目前判断变量有二种方式:
- 一般方式:try···except
try:
a = 8 if not c else c
except:
a = 8
- dir() /local()判断
我们先来看看IDLE 上他们的表现
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "copyright", "credits" or "license()" for more information.
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> locals()
{'__doc__': None, '__package__': None, '__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__name__': '__main__', '__loader__': <class '_frozen_importlib.BuiltinImporter'>}
>>> locals().key()
dict_keys(['__doc__', '__package__', '__builtins__', '__spec__', '__name__', '__loader__'])
我需要判断变量是否在name中
# local() 方式就不介绍了,本质一样
a = 8 if not 'c' in dir() or not c else 8
# 查看一下dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a']
dir()介绍
中文说明:不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息。
参数object: 对象、变量、类型。
版本:该函数在python各个版本中都有,但是每个版本中显示的属性细节有所不同。使用时注意区别。
代码示例:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> import struct
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'struct']
>>> dir(struct)
['Struct', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_clearcache', 'calcsize', 'error', 'pack', 'pack_into', 'unpack', 'unpack_from']
>>> class Person(object):
... def __dir__(self):
... return ["name", "age", "country"]
...
>>> dir(Person)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__','__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> tom = Person()
>>> dir(tom)
['age', 'country', 'name']