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都不会是真的。
答案 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_break
和right_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"
}
}