代碼塊 1、2、3 中的例外處理之間是否存在功能差異?我想根據型別錯誤列印不同的訊息,例如如果 psycopg2 錯誤包括錯誤代碼。我讀過嵌套嘗試除了塊是很好的做法。我以 psycopg2 為例。
# code block 1
def my_func(fun_arg):
try:
# ... some stuff
except psycopg2.Error as error:
print(f"Error while inserting data to PostgreSQL {type(error).__name__} {error.pgcode} {error.pgerror}")
except Exception as error:
print(f'error in my_func {type(error).__name__} {error.args}')
# code block 2
def my_func(fun_arg):
try:
# ... some stuff
try:
# ... some stuff
except psycopg2.Error as error:
print(f"Error while inserting data to PostgreSQL {type(error).__name__} {error.pgcode} {error.pgerror}")
except Exception as error:
print(f'error in my_func {type(error).__name__} {error.args}')
# code block 3
def my_func(fun_arg):
try:
# ... some stuff
except (psycopg2.Error, Exception) as error:
if (type(error).__name__ in (
'DatabaseError', 'OperationalError', 'NotSupportedError',
'ProgrammingError', 'DataError','IntegrityError',))
print(f"Error while inserting data to PostgreSQL {type(error).__name__} {error.pgcode} {error.pgerror}")
else:
print(f'error in my_func {type(error).__name__} {error.args}')
uj5u.com熱心網友回復:
我認為前兩個選項中的任何一個都可以。
就我個人而言,我認為對于一個簡短的簡單函式來說,第一個更容易閱讀,盡管如果my_func嵌套更大且更復雜,那么我會選擇第二個選項,因為它清楚地表明了sycopg2.Error可以在哪里提出確切的位置。
不會使用第三個選項。如果要捕獲多個例外,請使用以下語法:
except (RuntimeError, TypeError, NameError):
pass
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/465274.html
