我有以下内容:
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,1,无))),
我找到了一些例子但是所有这些都显示了影响的点,而不是问题的实际原因,如何解决这个问题(首先是Python2和Python3交叉支持,但Python2在这种情况下更重要)到以与上面的元组类似的方式获取问题的文件名,行和原因?
答案 0 :(得分:2)
捕获特定异常并查看其具有的信息。该消息是根据异常对象的参数进行格式化的,所以它的好处就是它的存在。在这种情况下,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
答案 1 :(得分:0)
对我来说
except Exception as e:
print e.__unicode__()
可以返回完全相同的消息
答案 2 :(得分:0)
要同时兼容python 2.5和3.x(2.5不支持除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