簡體   English   中英

在編寫許多 try-except 塊時是否有最佳實踐可以遵循?

[英]Is there a best practice to be followed when writing many try-except blocks?

一個簡單的例子來說明我的意思,假設我有 3.py 文件(file1、file2、file3)為我執行不同的任務,我需要在每一步都記錄錯誤,這是正確的方法嗎還是可以遵循另一種最佳實踐?

文件1.py:

def some_function(some_var):
    try:
        if some_var == 0:
            raise ValueError("Can't be zero")
        else:
            return 1
    except ValueError:
        raise

文件2.py

import file1

def some_other_fn(some_other_var):
    try:
        return file1.some_function(some_other_var)
    except:
        raise

文件3.py

import file2
import traceback

try:
    res = f2.some_other_fn(0)
except:
    # handle err
    print(traceback.format_exc())

當然,另一個問題是,當我重新提出在 file1 中可能遇到的多種類型的錯誤時(比如說 4+),我是否應該在不同的文件中捕獲相同的 4 個錯誤? 這似乎是多余的代碼。 有沒有辦法讓我知道在 file3 中 file1 發生了什么樣的錯誤,而無需在 file2 和 file3 中顯式寫入異常except ValueError

請注意,在file1和file2中退出是不可能的,file3是主要的控制流,其他函數必須返回它。

你似乎不明白 try-except 是如何工作的。 請重復您的教程以獲取示例。 由於基本代碼沒有引發運行時錯誤的可能性,因此 try-except 構造是不合適的。 手動引發異常是愚蠢的,將其包裝在 try-except 塊中,只是為了重新引發相同的異常。

反而:

def some_function(some_var):
    if some_var == 0:
        raise ValueError("Can't be zero")
    else:
        return 1

同樣,您的下一個 function 具有功能上的 null try-except 塊。 您不會以任何方式專門處理異常,因此您所做的只是復制默認的異常傳播——運行時系統已經這樣做了。

反而:

import file1

def some_other_fn(some_other_var):
    return file1.some_function(some_other_var)

在你的最后一個塊中,你終於正確地使用了 try-except :

  1. 您執行可能引發異常的代碼;
  2. 如果是這樣,那么您對異常做出反應。

暫無
暫無

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

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