Python if语句的语法

Python if语句的语法,python,Python,1.当我运行代码时,我得到了else:printno checkpoint found 2.缩进错误:未缩进与任何外部缩进级别不匹配 3.我试过修,但修不好 def Score(self): return sum(self.reward_window)/(len(self.reward_window)+1.) def Save(self): torch.save({'state_dict' :

1.当我运行代码时,我得到了else:printno checkpoint found 2.缩进错误:未缩进与任何外部缩进级别不匹配 3.我试过修,但修不好

  def Score(self):
                  return sum(self.reward_window)/(len(self.reward_window)+1.) 

            def Save(self): 
                torch.save({'state_dict' : self.model.state_dict(),
                            'optimizer' : self.optimizer.state_dict,
                            },'last_brain.pth')  

            def Load(self) :  
                if os.path.isfile('last_brain.pth') :  # this is where i get the syntax error

                    print("=> Loading last brain...") 
                    lastbrain = torch.load('last_brain.pth')  
                    self.model.load_state_dict(checkpoint['state_dict'])  
                    self.optimizer.load_state_dict(checkpoint['optimizer']) 
                    print ("done") 
                else: print("no checkpoint found")

IMO[1],我认为问题的另一个原因是其他函数与self在同一代码块中定义。我建议采用如下格式:

def score(self):
  # code for score...
  # etc...

def save( self ):
  # code for save
  # etc...

def load(self):
  # code for load...
  # etc...

1:我没有经常使用Python来了解函数声明的所有合法性,但是在大多数语言中,据我所知,在C/C++/Java中,语言设置为代码块大括号,在Python中设置为缩进/冒号的语言中,不能有多个函数声明。如果有人知道Python的例外情况或合法性,请在评论中直接告诉我,您的代码没有正确缩进。应该是这样的

def Score(self):
            return sum(self.reward_window)/(len(self.reward_window)+1.) 

def Save(self): 
            torch.save({'state_dict' : self.model.state_dict(),
                        'optimizer' : self.optimizer.state_dict,
                        },'last_brain.pth')  

def Load(self) :  
            if os.path.isfile('last_brain.pth') :

                print("=> Loading last brain...") 
                lastbrain = torch.load('last_brain.pth')  
                self.model.load_state_dict(checkpoint['state_dict'])  
                self.optimizer.load_state_dict(checkpoint['optimizer']) 
                print ("done") 
            else: print("no checkpoint found")

根据缩进,您定义了Save和loadinsidescore,这在Python中是不允许的。希望这能解决您的问题。

否则:需要以相同的缩进显示。请以代码块而不是图像的形式发布代码。另外,请包含错误的完整堆栈跟踪。@PacketLoss语法错误没有堆栈跟踪。请共享整个错误消息以及代码,而不是图像。请参阅:,。变量和函数名称应遵循小写字母,并带有下划线样式。您可以在Python函数中声明函数;在OP的代码中,函数不在函数内部,因为它们的缩进比函数体(一个返回语句)要少。存在缩进错误,因为它们比第一个函数的def语句缩进得更多,但缩进得不够远,无法成为函数块的一部分。语法错误的原因不是意见的问题,所以说这个有点奇怪。在Python中,def是一个可执行语句,可以出现在代码块中。可以使用if测试以两种不同的方式定义函数。当编写必须处理不同版本API的代码时,这是一种正常的方法。