有點背景 - 我有一個Python程序可以從CSV文件中繪製圖表。我試圖通過允許用戶輸入1到3個文件來使它更加靈活。我將csv數據導入到熊貓數據框中,然後用它們生成許多不同的圖。我確信有更好的方式來做我正在做的事情,但在我最初嘗試弄清楚用戶是否輸入了小於最大數目的情況下,我遇到了一些奇怪的事情(對我來說,至少)的文件。爲什麼我無法在Python中的block中同時捕獲NameError和UnboundLocalError?
這是我如何導入數據:
# Imports the data. The first two rows must be skipped due to the file format
data1 = pd.read_csv(filename1, skiprows=1, header=True)
if filename2 != '':
data2 = pd.read_csv(filename2, skiprows=1, header=True)
if filename3 != '':
data3 = pd.read_csv(filename3, skiprows=1, header=True)
所以data2
和data3
如果用戶已經從我的GUI提供的文件名只定義。後來,我只是想用的data2
和data3
的存在,以確定是否要分別繪製第二和第三個數據集:
try:
axarr[1, 0].psd(data1[Ynew], NFFT=n_samples, Fs=fs, noverlap=n_overlap, window=mlab.window_hanning, label=baseFileName1)
except KeyError:
axarr[1, 0].psd(data1[Yold], NFFT=n_samples, Fs=fs, noverlap=n_overlap, window=mlab.window_hanning, label=baseFileName1)
try:
axarr[1, 0].psd(data2[Ynew], NFFT=n_samples, Fs=fs, noverlap=n_overlap, window=mlab.window_hanning, label=baseFileName2)
except (UnboundLocalError, NameError):
pass
except KeyError:
axarr[1, 0].psd(data2[Yold], NFFT=n_samples, Fs=fs, noverlap=n_overlap, window=mlab.window_hanning, label=baseFileName2)
try:
axarr[1, 0].psd(data3[Ynew], NFFT=n_samples, Fs=fs, noverlap=n_overlap, window=mlab.window_hanning, label=baseFileName3)
except (UnboundLocalError, NameError):
pass
except KeyError:
axarr[1, 0].psd(data3[Yold], NFFT=n_samples, Fs=fs, noverlap=n_overlap, window=mlab.window_hanning, label=baseFileName3)
這裏的地方就變得奇怪。當我運行這個東西時,它會拋出一個UnboundLocalError,告訴我'NameError'在賦值之前被引用。所以,除了應該捕獲UnboundLocalError的塊之外沒有像我期望的那樣傳遞。如果我試圖捕獲UnboundLocalError,則會引發NameError。如果我試圖捕獲一個NameError,則會引發UnboundLocalError。有人可以向我解釋發生了什麼事嗎?
編輯 - 這裏的回溯:
請包括一個完整的堆棧跟蹤。 – DyZ
這是Python 2還是Python 3? – jwodder
試圖將其歸結爲一個獨立的例子也是有用的。首先,這使得更容易關注實際問題。另一方面,它經常揭示一個潛在的原因。我懷疑這一次,引用'NameError'不應該拋出任何異常。 –