1

我有以下内容:

try:
    package_info = __import__('app') #app.py
except:
    print traceback.extract_tb(sys.exc_info()[-1])
    print traceback.tb_lineno(sys.exc_info()[-1])

我从中得到的是:

[('test.py', 18, '<module>', 'package_info = __import__(\'app\')')]
18

现在这几乎是我想要的,这是实际错误开始的地方,但我需要遵循这一点并获得实际感染,例如app.py包含ä第 17 行而不是第 18 行。

如果未经处理,这是我的实际错误消息:

第 17 行文件 C:\app.py 中的非 ASCII 字符“\xc3”,但未声明编码;详见http://www.python.org/peps/pep-0263.html ", ('C:\app.py', 17, 0, None)), )

我找到了一些示例,但所有示例都显示了影响点,而不是问题的实际原因,如何解决这个问题(首选 Python2 和 Python3 交叉支持,但 Python2 在这种情况下更重要)来获取文件名, 行和问题的原因与上面的元组类似吗?

4

3 回答 3

4

捕获特定的异常并查看它有什么信息。该消息是根据异常对象的参数格式化的,所以它在那里是一个很好的选择。在这种情况下, SyntaxError 包含一个文件名属性。

try:
    package_info = __import__('app') #app.py
except SyntaxError, e:
    print traceback.extract_tb(sys.exc_info()[-1])
    print traceback.tb_lineno(sys.exc_info()[-1])
    print e.filename
于 2013-08-22T16:10:25.413 回答
0

为了我

except Exception as e:
    print e.__unicode__()

适用于返回完全相同的消息

于 2013-08-22T15:46:12.027 回答
0

要同时兼容 python 2.5 和 3.x(2.5 不支持除了 Exception as e),请使用

try:
    package_info = __import__('app') #app.py

except SyntaxError:
    exc_type, exc, tb = sys.exc_info()
    print(exc)
    print('\n\n'.join(traceback.format_tb(tb, limit=5)))

印刷

Non-ASCII character '\xc3' in file /foo/app.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details (app.py, line 2)
  File "foo.py", line 6, in <module>
    package_info = __import__('app') #app.py
于 2013-08-22T16:50:51.773 回答