簡體   English   中英

Python - Traceback,如何顯示導入的文件名

[英]Python - Traceback, how to show filename of imported

我有以下內容:

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在這種情況下更重要)來獲取文件名,行和問題的原因以類似的方式上面的元組?

捕獲特定的異常並查看它具有的信息。 該消息是根據異常對象的參數進行格式化的,所以它的好處就是它的存在。 在這種情況下,SyntaxError包含filename屬性。

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

為了我

except Exception as e:
    print e.__unicode__()

用於返回完全相同的消息

要同時兼容python 2.5和3.x(2.5不支持除Exception為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM