尝试功能无法正常运行

时间:2016-03-29 13:27:02

标签: python python-3.x try-catch

try:
    left_break = signs_pos[dave - 1]
except IndexError:
    left_error = True

try:
    right_break = signs_pos[dave + 1]
except IndexError:
    right_error = True

if left_error == True:
    current_cal = user_input[:right_break]
elif right_error == True:
    current_cal = user_input[left_break:]
else:
    current_cal = user_input[left_break:right_break]

我刚开始查看try函数,我需要一些帮助。我想要发生的是,如果它试图找到left_break并且它给出了一个错误,它会将left_error设置为true。但如果它没有给出错误,left_break将被正确设置。

当代码运行时,无论是向右还是向左都没有出错,它都没有正确设置left_break或right_break。

Traceback (most recent call last):
  File "C:\Users\Max\Desktop\MaxsCal.py", line 170, in <module>
    current_cal = user_input[:right_break]
NameError: name 'right_break' is not defined

这是我在没有try函数的情况下得到的错误。

Traceback (most recent call last):
  File "C:\Users\Max\Desktop\MaxsCal.py", line 157, in <module>
    right_break = signs_pos[dave + 1]
IndexError: list index out of range

right_error和left_error都不会是真的。

3 个答案:

答案 0 :(得分:3)

之所以发生这种情况,是因为你试图将某些分配给try / except中的变量,如果引发异常,它实际上不会存在。

这是一个简单的例子来澄清这一点:

try:
    x = 6 / 0
except ZeroDivisionError:
    print('this failed')
print(x)

>>> print(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

现在,为了解决这个问题并且您希望实际使用该变量,即使它在try / except中失败,您也希望在调用可能失败的 thing 之前声明它。

x = 0
try:
    x = 6 / 0
except ZeroDivisionError:
    print('this failed')
print(x)

>>> print(x)
>>> 0

甚至在你的尝试工作中,但在你打电话之前:

try:
    x = 0
    x = 6 / 0
except ZeroDivisionError:
    print('this failed')
print(x)

>>> print(x)
>>> 0

正如我在评论中提到的那样,您还可以在except中设置默认值:

try:
    x = 6 / 0
except ZeroDivisionError:
    print('this failed')
    x = 0
print(x)

>>> print(x)
>>> 0

答案 1 :(得分:0)

left_breakright_break仅在try块的范围内可用。您可以在try / except阻止之前定义它们,也可以在异常中添加else阻止,如this thread中所述。

答案 2 :(得分:0)

您的错误来自变量超出范围的事实。右中断仅在try块中的范围内,将其更改为

{
  name: 'Markers',
  type: 'line',
  data: [
  {
    x: 1,
    y: Date.UTC(2016,2,15),
    marker: { 
      fillColor:"#9CCB00"
    }
  }