簡體   English   中英

嘗試內 try-else 塊的 Python 錯誤

[英]Python error with try-within try-else block

我有一個腳本需要使用一個稍微不尋常的 try 結構,一般形式:

   try:
      # Try to get object 1 (may or may not exist)
   except:
      # Try to get object 2 (may or may not exist)
   else:
      try:
         # Try to append object 2 (which may not exist) to object 1, which has been retrieved already
   
   # Do stuff with the retrieved object/composite object

在最后一部分(我嘗試對檢索到的對象執行操作)時,我總是會遇到“意外縮進”錯誤,除非我放入了一個虛擬的 finally 塊:

   try:
      # Try to get object 1 (may or may not exist)
   except:
      # Try to get object 2 (may or may not exist)
   else:
      try:
         # Try to append object 2 (which may not exist) to object 1, which has been retrieved already
      finally:
         dummy = 1

   # Do stuff with the retrieved object/composite object

設置 dummy = 1 有零點,除此之外它似乎有效。 這是預期的行為嗎? 是否可以使用這樣的嵌套(或替代語法)而不訴諸虛擬代碼行!?

最后,在我這樣做的一個地方,只有在第二個“try”語句無一例外地執行時才需要額外的一行代碼,但似乎沒有辦法用“else”子句優雅地完成這項工作在內部/第二個“嘗試”上。 下面給出了第二個“else”行的“無效語法”錯誤:

   try:
      # Try to get object 1 (may or may not exist)
   except:
      # Try to get object 2 (may or may not exist)
   else:
      try:
         # Try to append object 2 (which may not exist) to object 1, which has been retrieved already
      else:
         # Do action only required on composite object
      finally:
         dummy = 1

   # Do stuff with the retrieved object/composite object

你把事情復雜化了。 在處理可能出現的錯誤時,您應該使用try 對於邏輯,最好使用if語句。

做就是了:

try:
   obj1 = ... # get first obj
except: # obj doesn't exist
   obj1 = None

try:
   obj2 = ... # get second obj
except: # obj doesn't exist
   obj2 = None

if obj1 and obj2: # if obj1 exists and obj2 exists
   obj1.append(obj2)


try時,您總是需要提供finallyexcept 想想如果在附加到對象 1 時對象 2 不存在,你會想要發生什么。如果你想做一些事情來處理這個,把它放在except 如果沒有,那么您不應該使用 try/except 。 要在對變量執行任何操作之前檢查變量是否存在,您可以使用 if 語句。 If 語句不需要else ,因此如果不滿足條件,則不會發生任何事情並且不會拋出錯誤。 例如

if obj1:
    # object 1 exists
    if obj2:
        # object 2 exists
        obj1.append(obj2)

暫無
暫無

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

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