2015-07-21 73 views
-1

我想用以下代碼記錄異常,但出現500錯誤。如果我省略了%ssomeGlobalVariable,它不會返回錯誤。爲什麼這不起作用?使用日誌處理程序時出現500錯誤

except Exception as e: 
    logging.warning(("%s Exception::Login:: "+ str(e.args)), % (someGlobalVariable)) 
    return False 
+0

以調試模式運行您的應用程序:'app.run(debug = True)'。它會給你一個追溯和交互式調試器來找出究竟是什麼錯誤。 – davidism

回答

2

你的語法是錯誤的, %是無效的,因爲%是二進制運算。讓logging進行替換時,不要使用% (value)語法。將值作爲更多參數傳遞給日誌記錄方法。

logging.warning('%s Exception::Login:: %s', someGlobalVariable, str(e.args)) 
0

你必須在someGlobalVariable替代有語法錯誤,應該是:

logging.warning('%s Exception::Login:: %s' % (someGlobalVariable, str(e.args))) 

由於@davidism他回答說(以下評論),讓記錄器是替換本身效率更高,因爲您可以避免字符串替換:

logging.warning('%s Exception::Login:: %s' , someGlobalVariable, str(e.args)) 
+0

這打破了讓日誌記錄只在必要時才進行替換的想法。 – davidism

+0

我認爲它打敗了@davidism這個想法,儘管我會感激一些關於爲什麼比替換字符串中的值更好的解釋,或者爲什麼以另一種方式來做它是錯誤的(以及因此downvote)。查看文檔(https://docs.python.org/2/library/logging.html#logging.debug)它說:「參數是使用字符串格式化操作符合併到msg中的參數。」在我看來,這是做同樣事情的另一種方式。 – cnluzon

+1

[這是一個很好的解釋。](http://stackoverflow.com/q/4148790/400617)基本上是因爲記錄器可以決定不顯示消息,在這種情況下,它不需要評估替換。 – davidism

相關問題