2013-03-24 5 views
-1

Вот мой код:Не может cacth NameError в питоне

from SimPy.Simulation import * 

class Message(Process): 
    def arrive(self, destination): 
     yield hold, self, 2 
     try: 
      print "%s %s going to %s" % (now(), self.name, destination.name) 
      self.interrupt(destination) 
     except NameError, x: 
      print "%s is out of reach" % x 

То, что я хочу сделать, это распечатать этот пункт назначения недоступен, когда его имя не существует, но я все еще получаю обычно ошибка python:

Traceback (most recent call last): 
    File "<pyshell#22>", line 1, in <module> 
    message.arrive(node2) 
NameError: name 'node2' is not defined 
+0

Где вы называете 'message.arrive (node2)'? –

+0

Я просто написал его в оболочке – tobi

+0

Тогда вы не определили 'node2'. –

ответ

0

Ошибка вашего имени в методе не возникает. Это происходит до метод называется.

Python пытается разрешить node2, прежде чем он сможет передать значение node2 методу message.arrive(). Код метода никогда не выполняется.

Вы получили бы ту же ошибку, если бы только вы набрали node2 в своей оболочке, вы не определили ее, чтобы Python не знал, как использовать ее значение.

+0

Хм, думаю, вы против. Любая идея, как сделать исключение в этом случае? – tobi

+0

@tobi: он * уже * генерирует исключение в этом случае, 'NameError'. Если вы имели в виду, как поймать его: вместо этого напишите 'try:' 'except' в оболочке. –

+0

Хорошо спасибо, это сработало! – tobi