开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。[面试题]

本文介绍了一个Java程序,该程序设计用于记录和管理错误信息。它通过循环记录最多8条不同的错误记录,对相同错误(基于文件名和行号)进行计数汇总,并对长文件名进行截取处理,确保记录的效率和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

处理:

1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加;

2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;

3、 输入的文件可能带路径,记录文件名称不能带路径。

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Map<String, Integer> map = new LinkedHashMap<String, Integer>();
        while (sc.hasNext()) {
            String str = sc.next();
            int linenum = sc.nextInt();
            String[] arr = str.split("\\\\");
            //String.split("\\\\")的含义,就是字符串以”\"分割得到,字符串数组
            //首先a中第一个和第三个\作为转义符号,因此上面代码中split方法的实际参数就是"\\"。
            //而split方法是以正则表达式,进行匹配分割的。
            //在正则中.$|()[{^?*+\\ 是特殊字符,同样的\也是转义符号
            //因此a中第一第三个\是java转义符,第二个\是正则表达式转义符,第四个\是真正意义上的字符”\"

            String s = arr[arr.length - 1];
            if (s.length() > 16) {
                s = s.substring(s.length() - 16);
            }
            String key = s + " " + linenum;
            int value = 1;
            if (map.containsKey(key)) {
                map.put(key, map.get(key) + 1);
            } else {
                map.put(key, value);
            }
            //}将while循环的第二个括号放在这里是  输入时无法结束循环  一直等待输入
            int count = 0;
            for (String string : map.keySet()) {
                count++;
                if (count > map.keySet().size() - 8) {
                    System.out.println(string + " " + map.get(string));
                }
            }
        }
    }
}
可以使用Python的traceback模块来实现一个简单错误记录功能模块。该模块提供了一些函数来跟踪记录Python程序的异常信息。 首先,我们可以在产生错误的地方调用`traceback.format_exc()`函数,该函数会返回一个字符串,包含当前错误的堆栈跟踪信息。我们可以将这个字符串记录下来。 然后,我们可以使用`sys.exc_info()`函数来获取当前的异常信息。该函数返回一个元组,包含当前异常的类型、错误对象跟踪对象。我们可以从跟踪对象中获取错误发生的文件名行号信息。 接下来,我们可以将错误信息堆栈跟踪信息写入一个文件或者输出到控制台。 下面是一个简单实现的示例代码: ```python import traceback import sys def log_error(): try: # 让程序产生一个错误 raise ValueError('示例错误') except: # 获取错误信息 error_type, error_value, error_traceback = sys.exc_info() # 获取错误发生的文件名行号信息 file_name = traceback.extract_tb(error_traceback)[-1].filename line_number = traceback.extract_tb(error_traceback)[-1].lineno # 将错误信息堆栈跟踪信息记录下来 error_message = f'错误类型:{error_type}\n错误内容:{error_value}\n文件名:{file_name}\n行号:{line_number}\n堆栈跟踪:\n{traceback.format_exc()}' with open('error_logs.txt', 'a') as f: f.write(error_message + '\n') # 或者直接输出到控制台 print(error_message) # 调用函数进行错误记录 log_error() ``` 运行以上代码后,程序会产生一个错误,并记录错误信息、错误文件名、行号堆栈跟踪信息到名为`error_logs.txt`的文件中。你可以根据实际情况修改日志记录的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值