except然后又重新调用函数,出现异常
def int_input():a = input('请输入一个整数:')
try:
int_a = int(a)
float_a = float(a)
except ValueError:
print('出错,您输入的不是一个整数!')
int_input()
if int_a != float_a:
int_input()
为什么会出现UnboundLocalError.....
完整报错内容?
你需要重新声明下变量,因为递归过程会产生屏蔽效果:
def int_input():
global int_a,float_a
a = input('请输入一个整数:')
try:
int_a = int(a)
float_a = float(a)
except ValueError:
print('出错,您输入的不是一个整数!')
int_input()
if int_a != float_a:
int_input()
int_input() Twilight6 发表于 2020-7-9 18:38
你需要重新声明下变量,因为递归过程会产生屏蔽效果:
这和屏蔽没啥关系吧…… 永恒的蓝色梦想 发表于 2020-7-9 19:07
这和屏蔽没啥关系吧……
递归了 就像内嵌函数,当你 float 那边报错了 导致 if 条件的 float_a 没有定义 Twilight6 发表于 2020-7-9 19:08
递归了 就像内嵌函数,当你 float 那边报错了 导致 if 条件的 float_a 没有定义
和我想说的一样,但这不叫屏蔽啊{:10_277:}
只能是 int_a 没定义吧,int 都过了,float 还过不了吗?{:10_312:} 永恒的蓝色梦想 发表于 2020-7-9 19:10
和我想说的一样,但这不叫屏蔽啊
只能是 int_a 没定义吧,int 都过了,float 还过不了吗 ...
开始递归之前的变量相对于递归中的变量是全局变量
当你内部变量赋值和外部名相同时候,就会触发屏蔽机制呗
Twilight6 发表于 2020-7-9 19:12
开始递归之前的变量相对于递归中的变量是全局变量
当你内部变量赋值和外部名相同时候,就会触发屏 ...
他这里根本没有全局变量啊{:10_312:}int_input 除外 永恒的蓝色梦想 发表于 2020-7-9 19:12
他这里根本没有全局变量啊int_input 除外
相对于叫做全局变量,触发的效果是一样的所以我这里也叫屏蔽了哈哈
主函数内部的内嵌函数外部的参数 ,相对于内嵌函数来说不就是全局变量了 Twilight6 发表于 2020-7-9 19:14
相对于叫做全局变量,触发的效果是一样的所以我这里也叫屏蔽了哈哈
主函数内部的内嵌函数外部的参数 ...
那好吧{:10_312:} 本帖最后由 Stubborn 于 2020-7-9 19:23 编辑
Twilight6 发表于 2020-7-9 19:14
相对于叫做全局变量,触发的效果是一样的所以我这里也叫屏蔽了哈哈
主函数内部的内嵌函数外部的参数 ...
程序设计问题啦。
def int_input():
a = input('请输入一个整数:')
try:
int_a = int(a)
float_a = float(a)
except ValueError:
print('出错,您输入的不是一个整数!')
int_input()
if int_a != float_a:
int_input()
以这个程序为例,,假设第一次调用,程序报错,被捕捉,进行第二次调用,程序不报错,正常走完流程,发回一个None。
此时,你还要走这部分的代码: if int_a != float_a:注意这个标红的,由于你的报错是int(a)引发的,所以int_a并没有被定义 Stubborn 发表于 2020-7-9 19:22
程序设计问题啦。
{:10_250:} 我认为我的没错 Twilight6 发表于 2020-7-9 19:29
我认为我的没错
int_a = int(a)这里引发错误,所以这里int_a是没有定义的。在后面使用肯定会报错的。
def int_input():
a = input('请输入一个整数:')
try:
int_a= int(a)
except ValueError:
print('出错,您输入的不是一个整数!')
int_input()
Stubborn 发表于 2020-7-9 19:32
int_a = int(a)这里引发错误,所以这里int_a是没有定义的。在后面使用肯定会报错的。
哦我懂你意思了 所以应该把 int_a 和 float_a 的判断放到 try: 那里
即使 int_a 没有被定义,也不会被执行到!!
感谢大佬们 enena 发表于 2020-7-9 20:21
所以应该把 int_a 和 float_a 的判断放到 try: 那里
即使 int_a 没有被定义,也不会被执行到!!
感谢大 ...
实际上float_a 不用定义,int_a如果没有定义到,必定会报错。下面的判断就是多余的
页:
[1]