【tips-Python】打印代码所在行

XX

 在解决BabyGan的环境问题后,终于到生成与判定阶段。由于用的是tensorflow-gpu-1.x,出现一大堆WARNING后就退出了,哥们儿连ERROR都懒得报就退出了,真的会谢。所以想debug一下看看代码在哪儿退出的。
 在c语言中 __FILE__,__LINE__,__FUNC__ 这三个变量,用得好可以当作一个动态调试器,帮助定位一些运行时错误,不管是调试还是运行日志的打印跟踪都非常有用。但是在python中,却没有提供这样的错误,报错都是使用的默认的报错堆栈来跟踪错误,对日志格式输出不够友好。

方法

inspect

inspect是python堆栈管理的包,可以实现了 __FILE__,__LINE__,__FUNC__这三个命令:

import inspect

def __LINE__():
    stack_t = inspect.stack()
    ttt = inspect.getframeinfo(stack_t[1][0])
    return ttt.lineno

def __FUNC__():
    stack_t = inspect.stack()
    ttt = inspect.getframeinfo(stack_t[1][0])
    return ttt.function

def __FILE__():
    stack_t = inspect.stack()
    ttt = inspect.getframeinfo(stack_t[1][0])
    return ttt.filename

logging

logging模块是python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。

日志等级

  1. DEBUG:程序调试bug时使用;
  2. INFO:程序正常运行时使用;
  3. WARNING:程序未按预期运行时使用,但并不是错误,如手机号已被注册;
  4. ERROR:程序出错误时使用,如:IO操作失败;
  5. CRITICAL:特别严重的问题,导致程序不能再继续运行时使用,如服务器宕机、磁盘爆满。
     默认的是WARNING等级,当在WARNINGWARNING之上等级的才记录日志信息,即在WARNING及之上(WARNING/ERROR/CRITICAL)等级的才会被记录。

日志显示数据格式

  1. %(levelno)s:打印日志级别的数值
  2. %(levelname)s:打印日志级别的名称
  3. %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
  4. %(filename)s:打印当前执行程序名
  5. %(funcName)s:打印日志的当前函数
  6. %(lineno)d:打印日志的当前行号
  7. %(asctime)s:打印日志的时间
  8. %(thread)d:打印线程ID
  9. %(threadName)s:打印线程名称
  10. %(process)d:打印进程ID
  11. %(message)s:打印日志信息
     根据上述信息可以定义自己的log输出形式
import logging
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: (message)s')
logging.debug('这是⼀个debug级别的⽇志信息')
logging.info('这是⼀个info级别的⽇志信息')
logging.warning('这是⼀个warning级别的⽇志信息')
logging.error('这是⼀个error级别的⽇志信息')
logging.critical('这是⼀个critical级别的⽇志信息')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值