当 运行 这段代码说 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。如果在 inputint 的处理过程中出现异常,则永远不会设置变量 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)