Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2到3迁移-UnicodeEncodeError:“ascii”编解码器无法对字符进行编码…:序号不在范围内_Python_Docker_Jenkins_Encoding_Migration - Fatal编程技术网

Python 2到3迁移-UnicodeEncodeError:“ascii”编解码器无法对字符进行编码…:序号不在范围内

Python 2到3迁移-UnicodeEncodeError:“ascii”编解码器无法对字符进行编码…:序号不在范围内,python,docker,jenkins,encoding,migration,Python,Docker,Jenkins,Encoding,Migration,我目前正在将一个用Python 2.7编写的web应用程序迁移到Python 3。到目前为止,我已经设法让一切正常,但有一个小小的装饰点让我完全困惑,我无法修复它 这是一个在代码run_pylint.py上运行静态分析的文件。我要把文件缩短一点,把重要的东西放在上面 RESULT_EXPRESSION = re.compile(r'Your code has been rated at (\d*\.*\d*)/10') VALIDATION_PERFECT = "✓ Pylint valida

我目前正在将一个用Python 2.7编写的web应用程序迁移到Python 3。到目前为止,我已经设法让一切正常,但有一个小小的装饰点让我完全困惑,我无法修复它

这是一个在代码run_pylint.py上运行静态分析的文件。我要把文件缩短一点,把重要的东西放在上面

RESULT_EXPRESSION = re.compile(r'Your code has been rated at (\d*\.*\d*)/10')

VALIDATION_PERFECT = "✓ Pylint validation SUCCESSFUL! Perfect score!"
# and a couple of other options...

class PyLintOutput:
    """
    Pylint report storage and retrieval
    """
    def __init__(self):
        """Initialize the storage"""
        self.content = []
        self.rate = None

    ... # skipping several unimportant methods

def get_rate(self):
    """
    After having been fed with PyLint output (via read()),
    determine the rate given to the module by PyLint.
    :return: A float between 0 (worst) to 10 (no issues detected).
    """
    if self.rate is not None:
        return self.rate

    for line in reversed(self.read()):
        result = re.search(RESULT_EXPRESSION, line)
        if result is None:
            continue

        self.rate = float(result.group(1))
        return self.rate

    return 0

    def __str__(self):
        """
        Get the full Pylint output as a string.
        """
        return "".join(self.content)

if __name__ == '__main__':
    # instance of the class
    OUT = PyLintOutput()

    # run PyLint static code analysis
    Run([MODULE_NAME], reporter=TextReporter(OUT), do_exit=False)

    if OUT.get_rate() < THRESHOLD:
        # if under threshold it prints a message to fix the bugs..
    elif OUT.get_rate() == THRESHOLD:
        # imperfect validation
    else:
        # perfect score
        print(VALIDATION_PERFECT)
在我的控制台中,我正在使用PyCharm。然而,为了部署这个web应用程序,我使用Docker和Jenkins。简要说明:使用Python 3.6运行centOS的docker容器,用于构建web应用程序。构建web应用程序的步骤之一是静态代码分析。如果失败,部署将失败。所有这些部署都发生在一个Jenkins作业中。这是控制台日志,当它达到上面提到的完全相同的步骤时:

[91mTraceback (most recent call last):
  File "run_pylint.py", line 123, in <module>
    print(VALIDATION_PERFECT)
UnicodeEncodeError: 'ascii' codec can't encode character '\u2713' in position 0: ordinal not in range(128)
我试着解码这个,所以它可以成为一个普通的Python3字符串,但是没有,和上面一样的错误

2我在使用的堆栈溢出中运行了accross函数,但它给了我相同的错误:

def safeStr(obj):
    try: return str(obj)
    except UnicodeEncodeError:
        return obj.encode('ascii', 'ignore').decode('ascii')
    except: return ""
3我尝试了utf8中不同的编码/解码组合,但没有成功。我知道现在Python 3中的普通字符串支持unicode,当我在本地执行此脚本时,我尝试的所有东西都在我的控制台中工作。然而,这个问题仍然存在于我的詹金斯工作中

有人能给我一些提示吗?

从答案中,您需要在Jenkins服务器上设置PYTHONENCODING环境变量。显然,这可以在Jenkins管理控制台中完成,或者在调用python验证脚本之前,可以在shell中执行:

export PYTHONIOENCODING=UTF-8

为什么不把它拆下来呢✓ 验证中的字符是完美的字符串,可以使用它吗?对不起,我在这里不是轻率的,只是想判断您是否希望Jenkins作业的输出中包含该字符,因此我们正在寻找解决错误的方法。@v25我正在尝试解决这个问题,我没有说它很紧急或什么,但它可能会在以后作为一个实际的关键问题出现。
def safeStr(obj):
    try: return str(obj)
    except UnicodeEncodeError:
        return obj.encode('ascii', 'ignore').decode('ascii')
    except: return ""
export PYTHONIOENCODING=UTF-8