簡體   English   中英

Python語法錯誤:'返回'外部函數

[英]Python SyntaxError :'return' outside function

編譯器顯示:

File "temp.py", line 56
    return result
SyntaxError: 'return' outside function

我哪里錯了?

class Complex (object):
    def __init__(self, realPart, imagPart):
        self.realPart = realPart
        self.imagPart = imagPart            

    def __str__(self):
        if type(self.realPart) == int and type(self.imagPart) == int:
            if self.imagPart >=0:
                return '%d+%di'%(self.realPart, self.imagPart)
            elif self.imagPart <0:
                return '%d%di'%(self.realPart, self.imagPart)   
    else:
        if self.imagPart >=0:
                return '%f+%fi'%(self.realPart, self.imagPart)
            elif self.imagPart <0:
                return '%f%fi'%(self.realPart, self.imagPart)

        def __div__(self, other):
            r1 = self.realPart
            i1 = self.imagPart
            r2 = other.realPart
            i2 = other.imagPart
            resultR = float(float(r1*r2+i1*i2)/float(r2*r2+i2*i2))
            resultI = float(float(r2*i1-r1*i2)/float(r2*r2+i2*i2))
            result = Complex(resultR, resultI)
            return result

c1 = Complex(2,3)
c2 = Complex(1,4)
print c1/c2

那這個呢?

class Complex (object):
    def __init__(self, realPart, imagPart):
        self.realPart = realPart
        self.imagPart = imagPart            

    def __str__(self):
        if type(self.realPart) == int and type(self.imagPart) == int:
            if self.imagPart >=0:
                return '%d+%di'%(self.realPart, self.imagPart)
            elif self.imagPart <0:
                return '%d%di'%(self.realPart, self.imagPart)
        else:
            if self.imagPart >=0:
                return '%f+%fi'%(self.realPart, self.imagPart)
            elif self.imagPart <0:
                return '%f%fi'%(self.realPart, self.imagPart)

    def __div__(self, other):
        r1 = self.realPart
        i1 = self.imagPart
        r2 = other.realPart
        i2 = other.imagPart
        resultR = float(float(r1*r2+i1*i2)/float(r2*r2+i2*i2))
        resultI = float(float(r2*i1-r1*i2)/float(r2*r2+i2*i2))
        result = Complex(resultR, resultI)
        return result

c1 = Complex(2,3)
c2 = Complex(1,4)
print c1/c2

我會檢查我的縮進,它看起來不對。 您是否可能混合使用制表符和空格? PEP8(Python 風格指南)建議使用4 個空格 與其他語言不同,空格在 Python 中有很大的不同,因此一致性很重要。

以上也提出以下建議:

使用 -t 選項調用 Python 命令行解釋器時,它會發出有關非法混合制表符和空格的代碼的警告。 使用 -tt 時,這些警告會變成錯誤。 強烈推薦這些選項!

特別是,您的第二個else似乎已關閉(可能應該縮進),並且此方法def __div__(self, other):也是(我認為應該與您的其他def處於同一級別 - 即,移動“出”而不是縮進)。

由於兩個字符都是“不可見的”,因此很容易出現混合制表符/空白的問題。

確保您的__div__是在同一級別的聲明__str__ (現在,它的內部聲明__str_ )。

通過我的復制和粘貼,這一行的所有內容:

else:
if self.imagPart >=0:
        return '%f+%fi'%(self.realPart, self.imagPart)
elif self.imagPart <0: # Everything under here..

到這一行:

    resultI = float(float(r2*i1-r1*i2)/float(r2*r2+i2*i2))
result = Complex(resultR, resultI)
return result # Needs to be unindented.

縮進錯誤。

好吧,我是 python 世界的新手。 我學到的是 return 語句應該是這樣的。

示例一:-

def split_train_test(data, test_ratio):
    shuffled_indices = np.random.permutation(len(data))
    test_set_size = int(len(data) * test_ratio)
    test_indices = shuffled_indices[:test_set_size]
    train_indices = shuffled_indices[test_set_size:]
    return data.iloc[train_indices],data.iloc[test_indices]

例子二:-

def load_housing_data(housing_path=HOUSING_PATH):
    csv_path = os.path.join(housing_path, "housing.csv")
    return pd.read_csv(csv_path)

我在這里回答:- https://stackoverflow.com/a/47377418/2298357

def functiont(x,y z,k):
    """some function
    """
    if xxxx:
        return True
    else
        return False

根據上面的代碼,您可以看到return語句在函數 def 內縮進,因此在這種情況下不會出現錯誤。 但是,如果 return 縮進如下,您將收到 python 錯誤 - SyntaxError :'return' 外部函數

def functiont(x,y z,k):
    """some function
    """
if xxxx:
    return True
else
    return False

使用好的編輯器

安裝以下可以正確格式化文件的編輯器之一

格式化文件

例如:在 Visual Studio 代碼中,打開文件 > 右鍵單擊​​ > 格式化文檔

發現並解決問題

一旦代碼被編輯器格式化,您將看到如下所示的內容

錯誤代碼

def func1():
    print ("I am in func1")
    return ""               # <----------- this is ok, its inside function func1

def func2():
    print ("I am in func2")
return ""                   # <-----CASE 1------ SyntaxError: 'return' outside function 'func2'

print ("I am outside of all functions")
return ""                   # <-----CASE 2------ SyntaxError: 'return' outside of all functions

注意 - 在案例 1 和案例 2 中,發生錯誤是因為“返回”不在任何函數內,它在所有函數之外。

好代碼

def func1():
    print ("I am in func1")
    return ""           # <----------- this is ok, its inside function func1

def func2():
    print ("I am in func2")
    return ""           # <-----CASE 1-- Fixed, added SPACE or TAB, now 'return' is inside function

print ("I am outside of all functions")
                        # <-----CASE 2-- Fixed, 'return' is removed, no return is required here

這是一個非常常見的問題,當您在出現間隙后用 python 編寫代碼時可能會遇到。

希望有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM