当 运行 这段代码说 str1 没有定义时,当我已经在 try 块中定义它时,我得到一个错误
I am getting an error when running this code saying str1 is not defined,when i have already defined it in try block
我正在尝试编写一个小代码块,在其中我接受输入(用户可以输入任何单词或字母),我的代码应该尝试查找它是正数还是负数或输入的值是一个字符串。
try:
str1=int(input('Enter a number:'))
print('try block is completed')
except:
str1=str(str1)
if str1>0:
print('entered value is positive')
elif str1<0:
print('entered value is negative')
else:
print(str1)
原因是异常是在 int(input(...)) 中引起的,因此 str1 仍未声明。
str1=input('Enter a number:')
try:
str1=int(str1)
print('try block is completed')
except:
str1=str(str1)
if str1>0:
print('entered value is positive')
elif str1<0:
print('entered value is negative')
else:
print(str1)
像这样修改您的代码以处理整数和字符串的异常
在调用 int
时出现异常的情况下,变量 str1
永远不会被创建,因为 int
在 [=12= 之前被评估(并引发错误) ] 被分配。
另外 - 在出现异常的情况下,您会因为尝试将字符串与 0 进行比较而得到 TypeError,因此请将所有 int-assuming 逻辑放在 try
中,如下所示:
str1=input('Enter a number:')
try:
str1=int(str1)
if str1>0:
print('entered value is positive')
elif str1<0:
print('entered value is negative')
except:
str1=str(str1)
print(str1)
在您的 except 分支上,您有以下调用:
str1=str(str1)
因为你在你的 except 上,并且你没有在 try/except 块之外定义你的 str1 变量,当它试图转换 str1 变量的内容时你的语句将失败(它不存在在 try 分支之外)。
处理这种情况的一种可能的实现方式是将 str1 设置为 None 或 except 块中的空字符串。像这样:
try:
str1 = int(input('Enter a number:'))
print('try block is completed')
except:
str1 = None
# First we check that our variable is not None (caught an exception)
try:
int_str1 = int(str1)
except:
int_str1 = None
if int_str1:
if int_str1 > 0:
print('entered value is positive')
elif int_str1 < 0:
print('entered value is negative')
else:
print('Could not get integer value of input')
这是因为您在 except 子句中使用了 str1
。如果在 input
或 int
的处理过程中出现异常,则永远不会设置变量 str1
。
如果您在 try
语句之前添加 str1=None
,我相信它不会再抱怨了,但是您需要更改 except
子句。
如果你只是关心转换为 int,你可以这样做:
str1= None
try:
str1=input('Enter a number:')
val=int(str1)
print('try block is completed')
except:
val=None
if val is None:
print('input is not a valid number')
elif val>0:
print('entered value is positive')
elif val<0:
print('entered value is negative')
else:
print(str1)
我正在尝试编写一个小代码块,在其中我接受输入(用户可以输入任何单词或字母),我的代码应该尝试查找它是正数还是负数或输入的值是一个字符串。
try:
str1=int(input('Enter a number:'))
print('try block is completed')
except:
str1=str(str1)
if str1>0:
print('entered value is positive')
elif str1<0:
print('entered value is negative')
else:
print(str1)
原因是异常是在 int(input(...)) 中引起的,因此 str1 仍未声明。
str1=input('Enter a number:')
try:
str1=int(str1)
print('try block is completed')
except:
str1=str(str1)
if str1>0:
print('entered value is positive')
elif str1<0:
print('entered value is negative')
else:
print(str1)
像这样修改您的代码以处理整数和字符串的异常
在调用 int
时出现异常的情况下,变量 str1
永远不会被创建,因为 int
在 [=12= 之前被评估(并引发错误) ] 被分配。
另外 - 在出现异常的情况下,您会因为尝试将字符串与 0 进行比较而得到 TypeError,因此请将所有 int-assuming 逻辑放在 try
中,如下所示:
str1=input('Enter a number:')
try:
str1=int(str1)
if str1>0:
print('entered value is positive')
elif str1<0:
print('entered value is negative')
except:
str1=str(str1)
print(str1)
在您的 except 分支上,您有以下调用:
str1=str(str1)
因为你在你的 except 上,并且你没有在 try/except 块之外定义你的 str1 变量,当它试图转换 str1 变量的内容时你的语句将失败(它不存在在 try 分支之外)。
处理这种情况的一种可能的实现方式是将 str1 设置为 None 或 except 块中的空字符串。像这样:
try:
str1 = int(input('Enter a number:'))
print('try block is completed')
except:
str1 = None
# First we check that our variable is not None (caught an exception)
try:
int_str1 = int(str1)
except:
int_str1 = None
if int_str1:
if int_str1 > 0:
print('entered value is positive')
elif int_str1 < 0:
print('entered value is negative')
else:
print('Could not get integer value of input')
这是因为您在 except 子句中使用了 str1
。如果在 input
或 int
的处理过程中出现异常,则永远不会设置变量 str1
。
如果您在 try
语句之前添加 str1=None
,我相信它不会再抱怨了,但是您需要更改 except
子句。
如果你只是关心转换为 int,你可以这样做:
str1= None
try:
str1=input('Enter a number:')
val=int(str1)
print('try block is completed')
except:
val=None
if val is None:
print('input is not a valid number')
elif val>0:
print('entered value is positive')
elif val<0:
print('entered value is negative')
else:
print(str1)