如何在Python 2和3中编写八进制值

lza*_*zap 5 python

我需要以Python 2和3兼容的方式编写0644(0o644)。怎么做?我唯一的想法是从字符串中解析此内容或将其转换为十六进制或十进制。这不是人类可读的。我不在乎慢速,它只被称为一次。

enr*_*cis 7

0o644 与python2和python3兼容


Jea*_*bre 5

非常老的python 2版本(<2.6)在python中不接受八进制前缀0o644

如果您确实需要与python 2.5或更早版本兼容,则可以使用int

int('644',8)
Run Code Online (Sandbox Code Playgroud)

请注意,捕获ImportError,,NameError...异常的兼容性技巧在这里不起作用,因为您无法捕获SyntaxError,解析器不会让这种情况发生:

# that doesn't work
try:
    x = 0644   # either crashes here
except SyntaxError:
    x = 0o644  # or here
# that doesn't work
Run Code Online (Sandbox Code Playgroud)