2017-06-21 3 views
0

Quelles sont les raisons possibles d'une interprétation différente d'un code python donné?Raisons d'une interprétation différente d'un code python?

J'ai un code que je peux exécuter sans erreurs sur un ordinateur, mais qui génère des erreurs sur un autre. Les versions de Python sont les mêmes (2.7.12). L'encodage des scripts est le même. Je me demande ce qui pourrait expliquer cela parce que ce sont les deux seules raisons que je vois pour une interprétation de code différente.

Voici ce que le code ressemble, en utilisant luigi (ici est seulement une partie du code):

class ExampleClass(luigi.postgres.CopyToTable): 

    def rows(self): 
     """ 
     Return/yield tuples or lists corresponding to each row to be inserted. 
     """ 
     with self.input()['Data'].open('r') as fobj: 
      for line in fobj: 
       yield line.strip('\n').split('\t') 

Quand je lance tout le code sur l'ordinateur où j'ai une erreur (ce qui est causé par les lignes que j'ai écrit ci-dessus), je reçois ceci:

IndentationError: unexpected indent 

et il est, en effet, un mélange des espaces et des onglets dans le code. Il est facile à résoudre, pas de problème ici, mais ma question concerne: Qu'est-ce qui pourrait expliquer cette différence dans l'interprétation? Je demande parce qu'après avoir résolu cela en remplaçant les espaces par des tabulations, j'ai eu d'autres erreurs qui ne devraient pas apparaître non plus et qui sont plus difficiles à résoudre, et le fait est que le code est censé être correct sur l'autre ordinateur donc je ne devrais pas avoir à résoudre ces erreurs.

Pour donner plus de détails, voici la deuxième erreur que je reçois après la résolution des problèmes d'indentation (je ne parviens pas à résoudre celui-ci):

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: malformed \N character escape 

Et elle est causée par la partie suivante de la Code:

class AnotherClass(ExampleClass): 

    def copy(self, cursor, file): 
     if isinstance(self.columns[0], six.string_types): 
      column_names = self.columns 
     elif len(self.columns[0]) == 2: 
      column_names = [c[0] for c in self.columns] 
     else: 
      raise Exception('columns must consist of column strings or (column string, type string) tuples (was %r ...)' % (self.columns[0],)) 
     cursor.copy_expert('copy ' + self.table + ' from stdin with header csv delimiter \'' + self.column_separator + '\' null \'''\\\N''\' quote \'''\"''\' ', file) 
+2

Pouvez-vous signaler les erreurs observées après avoir remplacé tous les espaces par des tabulations? –

+3

Quelle est votre méthode de transfert dudit code? –

+0

la réponse est votre message d'erreur: indentation. Donc, vous pouvez le réparer vous-même. –

Répondre

0

Comme l'erreur dit

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: malformed \N character escape

la ligne en question est celle-ci:Votre "N" doit être en minuscules, sinon il ne compte pas comme caractère de retour à la ligne. Essayez ceci:

cursor.copy_expert('copy ' + self.table + ' from stdin with header csv delimiter \'' + self.column_separator + '\' null \'''\\\n''\' quote \'''\"''\' ', file) 
+0

Comme je l'ai expliqué dans le post, il ne s'agit pas de résoudre cette erreur, il s'agit de comprendre pourquoi ce code fonctionne sur un autre ordinateur (car il fonctionne), et non sur cet ordinateur. J'ai seulement donné les rapports d'erreurs et les codes pour aider à comprendre. – Ashargin