簡體   English   中英

Python樣式:捕獲異常只是為了打印它們

[英]Python style: catching exceptions just to print them

我對Python的錯誤處理沒有豐富的經驗,並且想知道就樣式而言,如果您未在代碼中明確處理它,是否值得捕獲和打印仍然會引發的錯誤?

例如:

my_func(path):
    try:
        some_func_that_opens_file(path) # this would raise and IOError by itself
    except IOerror as ex:
        print ex  # or alternatively print 'your file doesn't exist'

還是try / except的目的是捕獲錯誤並繼續執行其他操作而不管錯誤(否則程序會失敗)? 例如:

my_func(path):
    try:
        some_func_that_opens_file(path) # this would raise and IOError by itself
    except IOerror:
        fixed = fix_path(path) # makes the path what it needs to be
        some_func_that_opens_file(fixed)

在問這個問題之前我進行了一些搜索,因此希望我的問題不會多余。

謝謝!

您可以處理異常以使代碼繼續; 另一種方法是讓默認處理程序(在解釋程序退出之前)打印回溯。

您可以處理不是代碼錯誤的異常。 有時,處理異常要比測試異常發生的可能性更為有效。 這被稱為尋求寬恕 ,而不是尋求許可

以在字典列表中收集信息為例。 您可以使用:

if key not in dictionary:
    dictionary[key] = ['default', 'initial', 'value']
listval = dictionary[key]
listval.extend(['other', 'values'])

那是在征求許可,而:

try:
    listval = dictionary[key]
except KeyError:
    listval = dictionary[key] = ['default', 'initial', 'value']
listval.extend(['other', 'values'])

會請求原諒。 這明確地使用了異常處理。 如果缺少鍵的情況是例外情況 (不常見),則請求寬恕比請求許可要快

如果錯誤是最終用戶造成的並且可以預見,則您還需要處理異常,因為使用丑陋的回溯停止程序對用戶不友好。

但是,不應捕獲由於錯誤使用API​​引發的異常。 這種不正確的使用表明某處代碼存在錯誤,作為開發人員,您真的想知道哪里出了問題以及在哪里。

暫無
暫無

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

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