python - 在 Python 中获取异常详细信息

标签 python exception error-handling python-3.3

我必须在同一个循环中打开并写入大约 10 个不同的文件。 例如:

for i in range(0,10):
    try:
        a=5
        file1 = open("file1.txt",'w+')
        file2 = open("file2.txt",'w+')
        #... etc

        print(str(a),file=file1)
        print(str(a)+"hi",file=file2)
        # ... etc
    except: 
        #error handling

现在我想做的是能够获取特定的异常信息,例如在一般异常中打开/写入的文件。根据我目前的理解,我必须做这样的事情来实现我想要的:

for i in range(0,5):
    a=5
    try:
        file1 = open("file1.txt",'w+')
        print(str(a),file=file1)
    except: 
        #error handling for file1
    try:
        file2 = open("file2.txt",'w+')
        print(str(a)+"hi",file=file2)
    except: 
        #error handling for file2

...当我必须为大约 10 个不同的文件执行此操作时,这将变得非常笨重且没有吸引力。有没有办法从我的第一个示例中的一般异常中获取(例如)文件名信息?基本上,因此异常可以报告诸如“写入 file1 时出错”之类的内容,而无需尝试/除了 file1 操作。

edit:这是对写入文件的数据的过度简化。 str(a) 和 str(a)+"hi"并不能很好地表示实际写入的数据; file1 可能需要一个硬编码的整数,而 file2 可能需要一个用多个变量格式化的字符串。将打开/写入过程概括为一个循环不会很好地工作。

最佳答案

您可以使用 sys.exc_info获取有关当前正在处理的异常的信息,包括异常对象本身。 IOError 异常包含您需要的所有信息,包括文件名、errno 和描述错误的字符串:

import sys

try:
    f1 = open('example1')
    f2 = open('example2')
except IOError:
    type, value, traceback = sys.exc_info()
    print('Error opening %s: %s' % (value.filename, value.strerror))

try block 中的执行显然在第一个异常之后仍会停止。

关于python - 在 Python 中获取异常详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15887038/

相关文章:

Java程序经过几行代码,最终进入

java - windowClosing() 并抛出异常

c# - 什么是沃森信息/桶?

python - 无法在循环时进行KeyboardInterrupt

使用自定义错误处理程序捕获 Javascript 错误后,Angular/Angular2 数据绑定(bind)不起作用

python - 为什么我的表面位于网格后面?希望能覆盖格子

python - 使用 JDBC、Python 和 JayDeBeApi 连接到 Filemaker 数据库

python - 如何阻止我的 Pandas 数据表在打印时被截断?

python - 找不到命令 : django-admin. py

mysql - VB.NET存储过程中的dbnull OUT参数