Jak sprawdzić, czy zmienna istnieje?
Chcę sprawdzić, czy zmienna istnieje. Teraz robię coś takiego:
try:
myVar
except NameError:
# Do something.
Czy są inne sposoby bez wyjątków? 10 answers
Aby sprawdzić istnienie zmiennej lokalnej:
if 'myVar' in locals():
# myVar exists.
Aby sprawdzić istnienie zmiennej globalnej:
if 'myVar' in globals():
# myVar exists.
Aby sprawdzić, czy obiekt ma atrybut:
if hasattr(obj, 'attr_name'):
# obj.attr_name exists.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-09 13:16:05
Użycie zmiennych, które nie zostały zdefiniowane lub ustawione (w sposób dorozumiany lub jawny) jest prawie zawsze złą rzeczą w dowolnym języku, ponieważ wskazuje, że logika programu nie została prawidłowo przemyślana i prawdopodobnie spowoduje nieprzewidywalne zachowanie.
Następujący trik, który jest podobny do twojego, zapewni, że zmienna ma jakąś wartość przed użyciem:
try:
myVar
except NameError:
myVar = None
# Now you're free to use myVar without Python complaining.
Jednak nadal uważam, że to nie jest dobry pomysł - moim zdaniem, ty powinien refaktorować kod tak, aby ta sytuacja nie wystąpiła.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-11 00:01:21
Prostym sposobem jest zainicjowanie go na początku mówiąc myVar = None
Potem:
if myVar is not None:
# Do something
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-10 19:42:28
Użycie try / except jest najlepszym sposobem na sprawdzenie istnienia zmiennej. Ale jest prawie na pewno lepszy sposób robienia tego, co robisz, niż ustawianie / testowanie zmiennych globalnych.
Na przykład, jeśli chcesz zainicjować zmienną na poziomie modułu przy pierwszym wywołaniu jakiejś funkcji, lepiej Użyj kodu w następujący sposób:
my_variable = None
def InitMyVariable():
global my_variable
if my_variable is None:
my_variable = ...
Dla obiektów / modułów, można również
'var' in dir(obj)
Na przykład,
>>> class Something(object):
... pass
...
>>> c = Something()
>>> c.a = 1
>>> 'a' in dir(c)
True
>>> 'b' in dir(c)
False
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-28 18:39:57
Zakładam, że test będzie użyty w funkcji, podobnej do odpowiedzi user97370 . Nie podoba mi się ta odpowiedź, ponieważ zanieczyszcza globalną przestrzeń nazw. Jednym ze sposobów, aby to naprawić, jest użycie klasy zamiast tego:
class InitMyVariable(object):
my_variable = None
def __call__(self):
if self.my_variable is None:
self.my_variable = ...
Nie podoba mi się to, ponieważ komplikuje to kod i otwiera pytania typu, czy to powinno potwierdzić schemat programowania Singletona? Na szczęście Python pozwolił funkcjom na posiadanie atrybutów przez jakiś czas, co daje nam to proste rozwiązanie:
def InitMyVariable():
if InitMyVariable.my_variable is None:
InitMyVariable.my_variable = ...
InitMyVariable.my_variable = None
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:38
catch
nazywa się except
w Pythonie. poza tym jest w porządku w takich prostych przypadkach. Jest AttributeError
można go użyć do sprawdzenia, czy obiekt ma atrybut.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-09 13:28:06
Sposobem, który często działa dobrze w takich sytuacjach, jest nie sprawdzanie jawnie, czy zmienna istnieje, ale po prostu owiń pierwsze użycie potencjalnie nieistniejącej zmiennej w try / except NameError:
# Search for entry.
for x in y:
if x == 3:
found = x
# Work with found entry.
try:
print('Found: {0}'.format(found))
except NameError:
print('Not found')
else:
# Handle rest of Found case here
...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-08 03:05:58
To tylko dodatek do poprzednich odpowiedzi, aby sprawdzić, czy klucz jest obecny w JSON / Dict, czy nie w Pythonie
'Nazwa obiektu Json / Dict'.has_key ('nazwa klucza')
To zwróci True lub False
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-31 04:30:49
Try` '
Myvariable = ['v', 'a', 'r']
try:
print(Myvariable)
except Nameerror:
print('variable \"Myvariable\" not found')
Mam nadzieję, że to pomoże!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-07 11:43:52