gpt4 book ai didi

python - 为什么我不能在同一Python block 中同时捕获NameError和UnboundLocalError?

转载 作者:行者123 更新时间:2023-12-03 09:01:50 24 4
gpt4 key购买 nike

有一点背景-我有一个Python程序,可以从CSV文件进行绘图。我试图通过允许用户输入1到3个文件来使其更加灵活。我将csv数据导入到pandas数据框中,然后使用它们生成许多不同的图。

我敢肯定,有一种更好的方式来做我正在做的事情,但是在我最初试图弄清楚用户输入的文件数是否少于最大数量时,遇到了一件奇怪的事情(至少对我来说)。

这是我导入数据的方式:

# 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)

因此,仅当用户从我的GUI提供文件名时,才定义 data2data3。后来,我只是想利用 data2data3的存在来确定是否分别绘制第二和第三数据集:
    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。有人可以告诉我这是怎么回事吗?

编辑-这是回溯:

Error Traceback

最佳答案

我已经多次重访,似乎有关于此类问题的错误报告。无论如何,异常(exception)是相对昂贵的操作。您可以使用以下类似方法来规避问题并减少周期。

data1 = None
data2 = None
data3 = None
if filename1 != '':
data1 = ...
if filename2 != '':
data2 = ...
if filename3 != '':
data3 = ...

if data1 is not None:
if Ynew in data1:
axarr[1,0].psd(data1[Ynew] ...
elif Yold in data1:
axarr[1,0].psd(data1[Yold] ...
if data2 is not None:
if Ynew in data2:
axarr[1,0].psd(data2[Ynew] ...
elif Yold in data2:
axarr[1,0].psd(data2[Yold] ...
if data3 is not None:
if Ynew in data3:
axarr[1,0].psd(data3[Ynew] ...
elif Yold in data3:
axarr[1,0].psd(data3[Yold] ...

关于python - 为什么我不能在同一Python block 中同时捕获NameError和UnboundLocalError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45513506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com