7

아시다시피, 우리는 단순히 할 경우 :파이썬에 나가서 설명하자면 NameError에서 정의되지 않은 이름을 얻기

>>> a > 0 
Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    a > 0 
NameError: name 'a' is not defined 

의 값이 'A'를 제외하고/오류를 잡는 그것에서 추출하는 방법이있다. 동적으로 생성 된 표현식을 eval으로 지정하고 정의되지 않은 이름을 검색하려고하므로이 코드가 필요합니다.

희망 나는 나 자신을 분명히했다. 감사합니다. 마누엘

+0

정의되지 않은 경우 h 그게 가치가있을 수 있니? –

+1

값이 아닌 이름을 추출하고 싶습니다. 나는 "a 값"이 아니라 "a '값"이라고 말했다. –

+1

왜'eval'을 사용해야합니까? 파이썬 셸을 만들고 싶다면, 이것은 올바른 도구가 아닙니다. 응용 프로그램에 대한 표현식 평가기를 만들려면이 도구가 적합하지 않습니다. –

답변

6
>>> import re 
>>> try: 
...  a>0 
... except (NameError,),e: 
...  print re.findall("name '(\w+)' is not defined",str(e))[0] 
a 

, 당신은 당신은 참조를 할당

>>> try: 
...  a > 0 
... except NameError as e: 
...  print e.message.split("'")[1] 
... 
a 
>>> 

파이썬 2.x는 필요한이 대신

>>> str(e).split("'")[1] 
'a' 
1
>>> import exceptions 
>>> try: 
...  a > 0 
... except exceptions.NameError, e: 
...  print e 
... 
name 'a' is not defined 
>>> 

당신은 '추출 값 예외 문자열을 구문 분석 할 수 있습니다. 당신이 정규식을 사용하지 않으려면

0

없음 import exceptions처럼 뭔가를 할 수 'a'는 다음과 같습니다.

>>> try: 
...  a > 0 
... except NameError as e: 
...  locals()[e.message.split("'")[1]] = 0 
... 
>>> a 
0 
관련 문제