如何解决这个Python异常:局部变量';第27条;分配前参考

如何解决这个Python异常:局部变量';第27条;分配前参考,python,exception,Python,Exception,我有以下代码: def id_to_article(id): if id == 1: article = "article: local" elif id == 2: article = "comments(article)" elif id == 3: article = "students" elif id == 4: .... elif id == 18: article

我有以下代码:

def id_to_article(id):
    if id == 1:
        article = "article: local"
    elif id == 2:
        article = "comments(article)"
    elif id == 3:
        article = "students"
    elif id == 4:
        ....
    elif id == 18:
        article = "community news"

    return article
我只调用id为1到18的文章。但我有一个例外:

local variable 'article' referenced before assignment

如何解决此问题?

在进入
return
语句之前,可能无法设置文章。这可以通过在if语句序列之前对其进行初始化来解决。

事实上,您传递的很可能不是1到18之间的整数,而是其他数字。尝试在第一个if语句之前打印
id
type(id)
,以查看函数中真正出现的内容。

是Psython中
if
块的局部变量吗?我添加了
print id
,它总是在1到18的范围内,所以当它到达
return
ing语句时,它不能被取消初始化;此外,如果在其他情况下使用此函数,它可能会有一个
id
的值,这会导致
文章
未被分配到。感谢您的解释。您的陈述可能不正确。在第一个
if
语句之前打印
id
键入(id)
,以查看您真正传递的内容。@LarryLustig I仅
Print id
,始终为1到18。
type(id)
是关于什么的?@LarryLustig我刚刚打印了
type(id)
it-
。。。这意味着什么?确定传递的是字符串还是浮点数,而不是整数。请参阅--传递的不是
1
,而是
“1”
(或者
u“1”
,如果使用的是Python 2.x)。这是正确的答案。事实证明,1和“1”在Psython中的值惊人地不相等。如果有人有这个问题,那么你需要引用所有的数字来解决它。或者将其包装在
int()
调用中。谢谢将
1
“1”
等同的编程语言很少。许多语言都会在函数定义中键入check参数(您必须将
defid\u写入文章(integer id)
,并且不允许传递字符串),但Python不是这样工作的。非常有趣。关于普赛顿,我还有很多要学的。