空闲导入子进程SyntaxError,但在Mac OSX的Terminal中的Python3中不这样

时间:2018-11-16 16:57:13

标签: python subprocess syntax-error python-idle

MacOS 10.11.6上的IDLE Python 3.7.1 Shell窗口中的以下代码片段导致语法错误。
解决方法是什么?
在Terminal Python 2.7.10或Python3中运行的相同代码不会导致错误。

<html>
  <head>
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  </head>
  <div class='post_wrapper'>
    {%for p in posts%}
       <div id='post_{{post.id}}'>
         <p>{{p.author.username}} says:</p>
         <p>{{p.body}}</p>
         {%if p.upvotes%}
           <button class='upvote' id='upvote_{{p.id}}'>Like <span id='upvotes_{{p.id}}'>{{p.upvotes}}</span></p>
         {%else%}
            <button class='upvote' id='upvote_{{p.id}}'>Like <span id='upvotes_{{p.id}}'>0</span></p>
         {%endif%}  
       </div>
    {%endfor%}
  </div>
  <script>
    $(document).ready(function(){
      $('.post_wrapper').on('click', '.upvote', function(){
         var post_id = this.id.match('\\d+');
         $.ajax({
          url: "/update_like",
          type: "get",
          data: {post_id: post_id},
          success: function(response) {
            if (response.success === 'True'){
              var like_val = parseInt($('#upvotes_'+post_id).text()) + 1;
              $('#upvotes_'+post_id).text(like_val.toString());
            }
            else{
               alert('You already liked that post!');
            }
          }
         });
      });
    });
  </script>
</html>

1 个答案:

答案 0 :(得分:0)

答案通常是在异常消息中。您应该输入一个且只有一个语句来响应IDLE的语句提示。几周前,我对IDLE doc进行了编辑,以使其更加清晰。

  

使用IDLE的外壳,您可以输入,编辑和调用完整的语句。   大多数控制台和终端只能在一个物理线路上使用   时间。

     

将代码粘贴到Shell中时,它不会被编译,并且可能   执行直到击中Return。可以先编辑粘贴的代码。如果一个   将一个以上的语句粘贴到Shell中,结果将是   当将多个语句编译为一个语句时出现SyntaxError。

如果根据提示>>>,键入import subprocess并按回车键,则IDLE在用户进程中将语句发送给Python以执行导入。然后,IDLE出现一个新的>>>提示。您输入了三个语句而没有触发执行。我唯一知道的方法是一次粘贴所有三个。 (如果您找到另一种方法,我想知道;-)。

要一次运行多个语句,请编辑或粘贴到文件中并运行它。我保留了一个用于此目的的tem.py文件。我通常使用Files =>最近的文件打开它。