나는 main과 notm이라는 두 개의 모듈을 가지고있다. 나는 주 모듈에서 내 사용자 정의 예외를 선언하고 그것을 잡아 싶습니다. 이 예외는 notmain 모듈에서 발생합니다. 문제는 notmain 모듈에서 발생한 예외를 잡을 수 없다는 것입니다.파이썬에서의 사용자 정의 예외 처리
main.py :
class MyException(Exception):
pass
m = __import__('notmain')
try:
m.func()
except MyException as e:
print(type(e))
print('ops')
notmain.py :
def func():
import main # 1
# from main import MyException # 2
# from main import MyException as MyException # 3
raise main.MyException # 1
# raise MyException # 2, 3
저도 같은 결과 다른 수입 방법을 시도했다. 내가 역 추적을 볼 이유
이<class 'main.MyException'>
ops
Traceback (most recent call last):
File "D:\exception\main.py", line 6, in <module>
m.func()
File "D:\exception\notmain.py", line 6, in func
raise main.MyException # 1
main.MyException
이 예외가 어떻게 든 잡힌 의미하지만 : 내가 main.py를 실행하면,이 보여? 왜 예외 클래스는 "main.MyException"이름을 가지고 있습니까? 이제
나는 조금 main.py 수정하고 그것을 실행하는 경우 :
try:
raise MyException
except MyException as e:
print(type(e))
print('ops')
내가 기대 한 것만 볼 수 있습니다 :이 클래스 MyException 다른 이유
<class '__main__.MyException'>
ops
는 나도 몰라 main.py 및 notmain.py에있는 이름? 그리고 파이썬이 예상대로 그것을 잡을 수없는 이유는 무엇입니까?
감사합니다 :)
감사합니다. 모듈을 동적으로 가져옵니다 (런타임에만 모듈의 이름을 알고 있습니다). 그래서 __import__가이를 수행하는 유일한 방법입니다. – demalexx