關於捕獲任何異常

如何編寫捕獲全部異常的try / except塊? html


#1樓

您能夠執行此操做來處理常規異常 python

try:
    a = 2/0
except Exception as e:
    print e.__doc__
    print e.message

#2樓

要捕獲全部可能的異常,請捕獲BaseException 。 它位於異常層次結構之上: 測試

Python 3: https//docs.python.org/3.5/library/exceptions.html#exception-hierarchy this

Python 2.7: https//docs.python.org/2.7/library/exceptions.html#exception-hierarchy 編碼

try:
    something()
except BaseException as error:
    print('An exception occurred: {}'.format(error))

但正如其餘人提到的那樣,除非你有充分的理由,不然你一般不會這樣作。 spa


#3樓

我剛剛發現了這個小技巧,用於測試Python 2.7中的異常名稱。 有時我在代碼中處理了特定的異常,因此我須要一個測試來查看該名稱是否在處理的異常列表中。 code

try:
    raise IndexError #as test error
except Exception as e:
    excepName = type(e).__name__ # returns the name of the exception

#4樓

try:
    whatever()
except:
    # this will catch any exception or error

值得一提的是,這不是正確的Python編碼。 這將捕獲您可能不想捕獲的許多錯誤。 orm


#5樓

你能夠,但你可能不該該: htm

try:
    do_something()
except:
    print "Caught it!"

可是,這也會捕獲像KeyboardInterrupt這樣的異常,你一般不但願這樣,是嗎? 除非您當即從新提出異常 - 請參閱文檔中的如下示例: ip

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except IOError as (errno, strerror):
    print "I/O error({0}): {1}".format(errno, strerror)
except ValueError:
    print "Could not convert data to an integer."
except:
    print "Unexpected error:", sys.exc_info()[0]
    raise
相關文章
相關標籤/搜索