Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当我已经在try块中定义了str1时,运行这段代码时,我得到一个错误,表示没有定义str1_Python_Python 3.x_Try Except - Fatal编程技术网

Python 当我已经在try块中定义了str1时,运行这段代码时,我得到一个错误,表示没有定义str1

Python 当我已经在try块中定义了str1时,运行这段代码时,我得到一个错误,表示没有定义str1,python,python-3.x,try-except,Python,Python 3.x,Try Except,我试图写一个小的代码块,在这里我接受一个输入(用户可以输入任何文字或字母),我的代码应该尝试找出它是一个正数还是负数,或者输入的值是一个字符串 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:

我试图写一个小的代码块,在这里我接受一个输入(用户可以输入任何文字或字母),我的代码应该尝试找出它是一个正数还是负数,或者输入的值是一个字符串

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)
试试看:
str1=int(输入('输入一个数字:'))
打印('尝试块已完成')
除:
str1=str(str1)
如果str1>0:
打印('输入值为正')

elif str1原因是在int(输入(…)中导致异常,因此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)
str1=input('输入一个数字:')
尝试:
str1=int(str1)
打印('尝试块已完成')
除:
str1=str(str1)
如果str1>0:
打印('输入值为正')

elif str1在调用
int
中出现异常的情况下,
str1
变量永远不会被创建,因为
int
str1
赋值之前被计算(并引发错误)

另外-在异常情况下,尝试将字符串与0进行比较时会出现TypeError,因此将所有int假设逻辑放在
try
中,如下所示:

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')
str1=input('输入一个数字:')
尝试:
str1=int(str1)
如果str1>0:
打印('输入值为正')

elif str1在您的分支上,您有以下呼叫:

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')
试试看:
str1=int(输入('输入一个数字:'))
打印('尝试块已完成')
除:
str1=无
#首先,我们检查变量是否为None(捕获异常)
尝试:
int_str1=int(str1)
除:
int_str1=无
如果int_str1:
如果int_str1>0:
打印('输入值为正')
elif int_str1<0:
打印('输入值为负数')
其他:
打印('无法获取输入的整数值')

这是因为在except子句中使用了
str1
。如果在处理
输入
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)
str1=None
尝试:
str1=输入('输入一个数字:')
val=int(str1)
打印('尝试块已完成')
除:
val=无
如果val为无:
打印('输入不是有效数字')
elif val>0:
打印('输入值为正')

elif valEnter a number:twenty Traceback(最近一次调用最后一次):文件“tryexcept.py”,第3行,在str1=int(输入('Enter a number:'))值错误:int()的文本无效,以10为基数:“twenty”在处理上述异常期间,发生了另一个异常:Traceback(最近一次调用最后一次):文件“tryexcept.py”,第7行,在str1=str(str1)NameError中:名称“str1”未定义在try块之前删除str1,但据我所知,代码首先会插入try块,如果出现异常/回溯/错误,则会转到str1已定义的时间,对吗?如果您发现此答案有用,请将其标记为已接受asnwer,左侧有记号标记。谢谢。注意:输入字符串后会出现一个类型错误,用于将
str
int
进行比较。我刚刚修改了他的代码。这个异常无论如何都可以在except块中处理。这个异常更有效,它必须是可接受的答案。我希望这会引发一个错误,因为ival是一个局部变量,但它运行良好,为什么rawstr=input('Enter a number')尝试:ival=int(rawstr)除了:ival=-1如果ival>0:print('Nice work'))else:print(‘不是数字’)否,try块不建立作用域,在try块内创建的变量在块外可用。这里的问题是赋值根本不会发生,因为在计算其右侧时出现异常。@TurePålsson,你是100%正确的。GopiB注意到我的回答有误导性。看看这个例子:关于异常处理的一个好建议是,在一个try块中尽可能少的异常,特别是当您没有指定捕获哪些异常时。