-2
爲什麼不能通過ValueError訪問「class」AttributeError'「,或者真的有辦法做到這一點我不知道?ValueError vs acessing sys.exc_info()
我需要像在下面的代碼中那樣調用sys.exec_info()來訪問有關錯誤地調用某個類的某個方法的屬性的信息,但ValueError本身無法提供此信息。
只是爲了進一步解釋我自己 - 當方法列表取決於使用類創建的實例的屬性(以及實例的方法)時,我遇到了一種情況,因此擁有一個簡單和標準的句柄如果創建「統一」實例,由於不恰當地調用實例的方法或屬性而導致的錯誤將是在代碼中銷售一些分支並在未使用的方法和屬性上節省內存的有效方法。
我在下面的代碼中演示了不正確的屬性調用,但同樣適用於這些方法。
#!/usr/bin/python3
import sys
class Number():
def __init__(self, real, im=0):
if im == 0:
self.real=real
else:
self.real=real
self.im=im
x=Number(10)
'''#this part does not work
try:
print(' x = ', x.real, " + ", x.im, 'i')
except ValueError as err:
print(err)
'''
try:
print(' x = ', x.real, " + ", x.im, 'i')
except:
print(sys.exc_info()[0])
如果你期待一個'AttributeError'(看起來很可能),爲什麼不'除了AttributeError as err:'? – jonrsharpe
'ValueError' **與'AttributeError'不是同一個類**。你爲什麼期望'ValueError'捕獲'AttributeError'異常? –