簡體   English   中英

為什么刪除此其他內容會使我的代碼運行得更快?

[英]Why does removing this else make my code run so much faster?

我正在使用python遍歷數據庫,並try使用tryexcept處理查詢。 在嘗試優化代碼時,我遇到了一個奇怪的難題。

這段代碼:

try:
    cursor.execute("SELECT my_name FROM {}.{} LIMIT 1".format(myschema,mytable))
except(Exception, psycopg2.DatabaseError) as error:
    conn.rollback()
else:
    origName = cursor.fetchone()
    if origName is None:
        outputName = "ERROR2"
        return outputName
try:
    cursor.execute("SELECT different_column FROM {}.{} ORDER by a_column DESC LIMIT 1".format(myschema, mytable))
except(Exception, psycopg2.DatabaseError) as error:
    conn.rollback()
    try:...
        #more try/excepts and so on

在整個數據倉庫中運行大約需要19分鍾。

但是這個代碼:

try:
    cursor.execute("SELECT my_column FROM {}.{} LIMIT 1".format(myschema,mytable))
except(Exception, psycopg2.DatabaseError) as error:
    conn.rollback()

origName = cursor.fetchone()
if origName is None:
    outputName = "ERROR2"
    return outputName
try:
    cursor.execute("SELECT different_column FROM {}.{} ORDER by a_column DESC LIMIT 1".format(myschema, mytable))
except(Exception, psycopg2.DatabaseError) as error:
    conn.rollback()
    try:...
        #exact same code with try/excepts and so on

大約在1-1.5分鍾內即可完成運行。 如果刪除其他內容,為什么會這么快? 是否有東西被跳過/忽略? 我覺得我一定做錯了。 我真的不明白如何在try:except:語句之后繼續執行我的代碼。

這是因為在python世界中, try-except塊非常普遍,而且使用起來非常便宜。 if a != 1: :,則try-except比false語句便宜。

其他條款本身很有趣。 它在沒有例外的情況下運行,但是在最終條款之前。 這是其主要目的。 因此,如果您的try-except塊沒有捕獲,則else語句仍然運行。 這是它會降低代碼速度的主要原因。

如果沒有else子句,那么在最終確定之前運行其他代碼的唯一選擇就是將代碼添加到try子句的笨拙做法。 這很笨拙,因為它冒着在代碼中引發異常的危險,而這些異常本來不會受到try塊的保護。

在完成之前運行其他不受保護的代碼的用例很少出現。 因此,不要期望在已發布的代碼中看到很多示例。 這有點罕見。

查看這篇文章以獲取更多信息

暫無
暫無

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

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