python如何打印井号_python中怎么打印行号和文件名

展开全部

通过调用堆栈里面的代码对象来获取。

一般是自己引发一个异常,然后捕获62616964757a686964616fe59b9ee7ad9431333361326337这个异常,在异常处理中通过堆栈信息获得行号。

比如:try:

raise ZeroDivisionError

except ZeroDivisionError:

frame = sys.exc_info()[2].tb_frame.f_back

return frame.f_lineno

如果需要更多的信息,可以通过inspect模块的stack()方法获得整个调用栈。可自定义一个exception类型。import inspect

class MyErrorCode(object):

STANDARD = 0x0001

code_map_msg = {

MyErrorCode.STANDARD: "standard error",

}

class MyError(Exception):

def __init__(self, error_code):

self.error_code = error_code

try:

_current_call = inspect.stack()[1]

_iframe = _current_call[0]

self.line_no = _iframe.f_lineno

self.module_name = _iframe.f_globals.get("__name__", "")

self.method_name = _current_call[3]

self.class_name = _iframe.f_locals.get("self", None).__class__.__name__

except (IndexError, AttributeError):

self.line_no = ""

self.module_name = ""

self.method_name = ""

self.class_name = ""

def __repr__(self):

msg = code_map_msg.get(self.error_code, "")

return "[*] MyError: %s > %s. module: %s, class: %s, method: %s, line: %s " % (self.error_code, msg, self.module_name, self.class_name, self.method_name, self.line_no)

def __str__(self):

return code_map_msg.get(self.error_code, "not find any match msg for code: %s" % self.error_code)

然后在需要获取行号的地方引发这个异常并捕获它,然后从异常对象中获取line_no.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值