2015-05-01 42 views
0

我在每次提交時都遇到了Travis問題。我的測試中對本地工作,但對特拉維斯我得到這個錯誤:在Travis上運行測試時語法無效

Traceback (most recent call last): 
    File "/opt/python/3.2.5/lib/python3.2/unittest/case.py", line 370, in _executeTestPart 
    function() 
    File "/opt/python/3.2.5/lib/python3.2/unittest/loader.py", line 32, in testFailure 
    raise exception 
ImportError: Failed to import test module: test.test_parser 
Traceback (most recent call last): 
    File "/opt/python/3.2.5/lib/python3.2/unittest/loader.py", line 261, in _find_tests 
    module = self._get_module_from_name(name) 
    File "/opt/python/3.2.5/lib/python3.2/unittest/loader.py", line 239, in _get_module_from_name 
    __import__(name) 
    File "/home/travis/build/davidmogar/genderator/test/test_parser.py", line 5, in <module> 
    import genderator 
    File "/home/travis/build/davidmogar/genderator/genderator/__init__.py", line 3, in <module> 
    from genderator.parser import Parser 
    File "/home/travis/build/davidmogar/genderator/genderator/parser.py", line 5, in <module> 
    from .utils import Normalizer 
    File "/home/travis/build/davidmogar/genderator/genderator/utils.py", line 63 
    u'\N{COMBINING TILDE}' 
         ^
SyntaxError: invalid syntax 

這裏是該行的代碼是:

def remove_accent_marks(text): 
     good_accents = { 
      u'\N{COMBINING TILDE}', 
      u'\N{COMBINING CEDILLA}' 
     } 

     return ''.join(c for c in unicodedata.normalize('NFKD', text) 
         if unicodedata.category(c) != 'Mn' or c in good_accents) 

我不知道是什麼問題的想法,因爲我已經說,所有的測試都在當地工作。這是我的.travis.yml文件:

language: python 
python: 
    - "3.2" 
    - "3.3" 
    - "3.4" 
script: python -m unittest discover 

任何想法?

回答

3

Python 3中的u'...'語法僅在Python 3.3 and up中受支持。

u前綴只是在那裏支持多種語言的Python代碼(同時支持2和3),並且可以安全,如果你不需要支持Python的2

如果你需要同時支持Python的去除2 3.2,你將不得不使用不同的方法。您可以使用from __future__導入來使Python 2中的所有字符串文字產生unicode字符串對象;這適用於每個模塊:

from __future__ import unicode_literals 

def remove_accent_marks(text): 
    good_accents = { 
     '\N{COMBINING TILDE}', 
     '\N{COMBINING CEDILLA}' 
    } 

的字符串會在這兩個Python 2裏被視爲Unicode和3

或者你可以創建自己的多語種功能:

import sys 

if sys.version_info[0] < 3: 
    u = lambda s: unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") 
else: 
    u = lambda s: s 

和上使用所有的Unicode字符串:

def remove_accent_marks(text): 
    good_accents = { 
     u('\N{COMBINING TILDE}'), 
     u('\N{COMBINING CEDILLA}') 
    } 

,或者您可以使用six library生產出BR對您而言:

import six 

def remove_accent_marks(text): 
    good_accents = { 
     six.u('\N{COMBINING TILDE}'), 
     six.u('\N{COMBINING CEDILLA}') 
    } 

您可能想要閱讀Python Porting HOWTO

+0

我想支持Python 2.有沒有其他的選擇? –

+0

@DavidMorenoGarcía:更新您的替代品。 –

+0

謝謝。完美的答案。 –

相關問題