PYTHON中如何判断一个异常是不是此文件本身抛出的

wh62592855 2011-09-06 02:07:05
有a.py和b.py两个脚本,在b.py中会调用a.py中的方法,类似下面这样
#a.py
def func1():
try:
...
except:
raise

#b.py
import a
def func2():
try:
...
func1()
...
except:
#此处如果发生了异常 如何判断此异常是a.py中引起的还是b.py中引起的呢


因为程序中会使用到多个.py文件,因此想在最上端的.py报错时能够捕捉到报错的信息,比如说这个错误是在哪个文件里的哪行报出来的,不知该如何实现,还望大家赐教。
...全文
167 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wh62592855 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 iambic 的回复:]

首先,你的异常架构要依赖于文件名,这个肯定是错误的。
其次,异常栈里有文件信息。traceback的文档里就有例子。
[/Quote]好的 我去查查TRACEBACK的内容 谢谢
iambic 2011-09-06
  • 打赏
  • 举报
回复
首先,你的异常架构要依赖于文件名,这个肯定是错误的。
其次,异常栈里有文件信息。traceback的文档里就有例子。
wh62592855 2011-09-06
  • 打赏
  • 举报
回复
恩 行号的话是可以获取到最初引发异常的那条语句在其文件中的位置,比如上前面例子中的func1()中引发异常的语句在MysqlDao.py中的行号。
可是我不知道该怎样获得其文件名,也就是说我不仅想知道出错的行号,还需要知道出错行所在哪个.py文件中。
本来想用一个.PY文件对应一个类来设计异常结构的,可是就是遇到了我上面说到的那个问题
iambic 2011-09-06
  • 打赏
  • 举报
回复
出错的行号你直接查异常栈就可以了。
wh62592855 2011-09-06
  • 打赏
  • 举报
回复
#我自己写了一个异常的类,如下所示
class MetaError(Exception):
def __init__(self,msg,line):
self.msg = msg
self.line = line
self.className = str(self.__class__)[str(self.__class__).rfind(".")+1:str(self.__class__).rfind("'")]

class MetaManagerError(MetaError):
def __init__(self,msg,line):
super(MetaManagerError,self).__init__(msg,line)

class MysqlDaoError(MetaError):
def __init__(self,msg,line):
super(MysqlDaoError,self).__init__(msg,line)

class CustomError(MetaError):
def __init__(self,msg,line):
super(CustomError,self).__init__(msg,line)

#在MysqlDao.py中有如下语句
def func1():
try:
...
except:
#出现异常时,抛出MetaError.MysqlDaoError类异常
self.conn.rollback()
exInfo = sys.exc_info()
raise MetaError.MysqlDaoError,(exInfo[1],exInfo[2].tb_lineno)

#在MetaManager.py中会调用在MysqlDao.func1(),此时如果出错了在
def func2():
try:
...
MysqlDao.func1()
...
except Exception,e:
raise MetaError.MetaManagerError,(e.msg,e.line)


我本来想通过异常类的self.className属性来判断每个异常是在哪个.py文件中产生的。可是这样写的话有个问题,就是在MetaManager.py的func2()中raise的异常类型是MetaError.MetaManagerError,而不是最初的MetaError.MysqlDaoError了。
并且,如果我在多个.py文件里都raise CustomError类型的异常,如何能根据异常类型判断出是在哪个文件里抛出的异常并且捕获到出错的行号呢?
wh62592855 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iambic 的回复:]

判断异常的类型。
[/Quote]请问大致该如何实现呢,能详细点吗
iambic 2011-09-06
  • 打赏
  • 举报
回复
判断异常的类型。

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧