Python使用日志记录SQL错误

Python使用日志记录SQL错误,python,python-2.7,Python,Python 2.7,为什么名称解析错误未被Exception捕获? 此外,我如何提取错误文本并将其扔进记录器工具? 多谢各位 logging.basicConfig(filename = "{}.log".format(sys.argv[0]), level=logging.DEBUG) def simpleLogger(something): try : something logging.info("Iteration fine") except :

为什么名称解析错误未被Exception捕获? 此外,我如何提取错误文本并将其扔进记录器工具? 多谢各位

logging.basicConfig(filename = "{}.log".format(sys.argv[0]), level=logging.DEBUG)

def simpleLogger(something):
     try :
         something
         logging.info("Iteration fine")
     except :

         logging.warning("Something bad happened!")

 def doSometh():
     conn = psycopg2.connect(host = "1x18.249.21" , user = "tima",  dbname = "tima")
     curr = conn.cursor()
     sql = "select * from app_catalog;"

     curr.execute(sql)

     print curr.fetchall()

 def main():
    simpleLogger(doSometh())


 if __name__ == '__main__':
     sys.exit(main())
以下是产生的错误:

conn = psycopg2.connect(host = "172.x18.249.21" , user = "tima",  dbname = "tima")
File "/apps/appeng/python-2.7.3/lib/python2.7/site-packages/psycopg2/__init__.py", line   179, in connect   connection_factory=connection_factory, async=async)
psycopg2.OperationalError: could not translate host name "172.x18.249.21" to address: Name or service not known

如果这是实际代码结构的代表,那么实际上是在将doSomething()函数传递给simpleLogger时调用它,而不是在传递可调用对象后再调用它;因此,执行不会发生在try/except块中

你能复制并粘贴你的错误吗?谢谢。据我所知,若我想对doSomething()的结果做出反应,我需要decorator包装这个函数,并记录doSomething()输出是否可疑,等等。。。我说的对吗?坦白说,我通常只在函数本身中使用日志逻辑。不是迷人的或整洁的,但它非常简单和清晰。在您的情况下,使用这种结构,如果要装饰任何可调用项,您只需要接受对该可调用项的引用,然后在装饰器的主体中调用它。您的示例中的问题很简单,就是您在尝试传递函数时调用了该函数。在
\uuuu main\uuuu
块中删除doSometh()中的括号,看看会发生什么。非常感谢syrion。我们将对此进行进一步挖掘。