Help sur Python

トップ ページ

このメッセージに返信
著者: Patrice Karatchentzeff
日付:  
To: GUILDE
題目: Help sur Python
Salut,

J'ai un truc de fou dans un bout de code Python. J'ai réussi à isoler
le problème, mais je ne le comprends pas !

Tout se passe entre les 3 fonctions suivantes :

def FR_is_a_single(char):
    return (char == '.') or (char == ',')


def FR_typo_for_single(cur, text, prevchar, nextchar):
    global c, totalpagemove
    # n/n  --> n/s
    if (prevchar != FR_is_a_space() and nextchar != FR_is_a_space()):
        scribus.insertText(space, cur + 1, text)
        c += 1 # current cursor has increased by 1
        totalpagemove += 1
    # n/s  --> n/s (swap 'general' s in 'good' s if ever)
    if (prevchar != FR_is_a_space() and nextchar == FR_is_a_space()):
        scribus.selectText(cur + 1, 1, text)
        scribus.deleteText(text)
        scribus.insertText(space, cur + 1, text)
    # s/n  --> n/s
    if (prevchar == FR_is_a_space() and nextchar != FR_is_a_space()):
        scribus.selectText(cur - 1, 1, text)
        scribus.deleteText(text) # index pointer has changed by -1 !
        scribus.selectText(cur, 1, text)
        scribus.insertText(space, cur, text)
    # s/s  --> n/s (swap 'general' s in 'good' s if ever)
    if (prevchar == FR_is_a_space() and nextchar == FR_is_a_space()):
        scribus.selectText(cur -1, 1, text)
        scribus.deleteText(text)
        scribus.selectText(cur, 1, text) # index pointer has now -1
        scribus.deleteText(text)
        scribus.insertText(space, cur, text)
        c -= 1 # decreased this time...
        totalpagemove -= 1


def FR_is_a_double_thin(char):
    return (char == ';') or (char == '!') or (char == '?')


À la compilation, Python gueule (avec ses merveilleux messages
illisibles) sur la définition de la dernière fonction :

Traceback (most recent call last):
File "/usr/lib/python3.10/code.py", line 63, in runsource
code = self.compile(source, filename, symbol)
File "/usr/lib/python3.10/codeop.py", line 153, in __call__
return _maybe_compile(self.compiler, source, filename, symbol)
File "/usr/lib/python3.10/codeop.py", line 70, in _maybe_compile
compiler(source + "\n", filename, symbol)
File "/usr/lib/python3.10/codeop.py", line 118, in __call__
codeob = compile(source, filename, symbol, self.flags, True)
File "<console>", line 31
def FR_is_a_double_thin(char):
^^^
SyntaxError: invalid syntax
Traceback (most recent call last)
File "/usr/lib/python3.10/code.py", line 63, in runsource
code = self.compile(source, fileame, symbol)
File "/usr/lib/python3.10/codeop.py", line 153, in __call__
return _maybe_compile(self.compiler, source, filename, symbol)
File "/usr/lib/python3.10/codeop.py", line 70, in _maybe_compile
compiler(source + "\n", filename, symbol)
File "/usr/lib/python3.10/codeop.py", line 118, in __call__
codeob = compile(source, filename, symbol, self.flags, True)
File "<console>", line 1
return (char == ';') or (char == '!') or (char == '?')
IndentationError: unexpected indent

Bref, il y a une erreur AVANT. SI je commente toute la fonction 2, le
code compile. SI je ne laisse que la définition de la fonction 2,
l'erreur est toujours la même, comme si elle venait de la définition.
Le plus hallucinant : si je permute la 1 et la 2, le code compile !

Bien entendu, toute l'indentation est A PRIORI correcte... suis pas
sûr que le copier-coller fonctionne. Pour info, c'est pour Scribus,
donc ça ne compile qu'en interne avec un document ouvert. J'utilise
Python 3.0 (info importante, étant donné la faible portabilité de
python...).

Si quelqu'un peut m'aider avant que je n'explose ce truc, ce serait sympa :)

Je hais python !!! (ça sert à rien, juste à me soulager)

Merci

PK

-- 
      |\      _,,,---,,_           Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff@gmail.com
     |,4-  ) )-,_. ,\ (  `'-'
    '---''(_/--'  `-'\_)