2012-10-19 3 views
0

imp 라이브러리를 사용하여 문자열에서 모듈을 가져오고 있습니다 (묻지 않음). 이 모든 벌금과 멋쟁이 작업이지만, 이러한 모듈에 오류가있을 때,이 같은 스택 트레이스 얻을 : 뭔가에 모듈의 파일 속성을 설정하려고했습니다모듈에서 발생하는 예외가 해당 파일 이름을 사용하도록 파이썬에서 모듈의 파일 이름을 어떻게 설정합니까?

Traceback (most recent call last): 
    File "<string>", line 33, in do_something 
    File "<string>", line 20, in really_do_something 
Exception: STRING FILENAME EXAMPLE 

의미가 있습니다 그러나 <string> 파일 이름은 예외 추적에서 계속 사용됩니다.

예외에 사용 된 파일 이름을 지정하는 방법에 대한 아이디어가 있습니까?

UPDATE :이 같은 꼬마 도깨비을 사용하고 있습니다 : Dynamic module importing is trying to do relative imports when it shouldn't

+1

'imp'를 사용하여 모듈을 가져온 코드를 표시 할 수 있습니까? – mgilson

+0

파일 이름은 모듈 객체가 아니라 코드 객체에서 취합니다. 문자열을 컴파일하는 방법을 알아야합니다. –

+0

k, imp 모듈을 사용하는 방법에 대한 링크를 추가했습니다. –

답변

4

파일 이름은 exec()에 의해 생성 된 코드 객체에 설정됩니다. 문자열에 exec()을 사용하는 대신 compile()을 사용하여 코드를 별도로 컴파일해야합니다. 그렇게하면 파일 이름을 설정할 수 있습니다 :

code = compile(file_contents, '/your/filename.py', 'exec') 
exec(code, mod.__dict__) 
+0

이것은 완벽하게 작동합니다, 감사합니다! –

+1

'vars (mod)'는'mod .__ dict__'에 대한 대안입니다. – eryksun