[英]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
時,您總是需要提供finally
或except
。 想想如果在附加到對象 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.