1

为什么我不能这样做?

extout = os.path.splitext(args.outputfile)[1].lower()
if extout != (".csv" | ".xml"):  # <------- creates error
        sys.stderr.write('ERROR: Invalid extension or none found. This program only recognizes .csv or .xml extensions %s\n')
        sys.exit(1)

这给了我一个类型错误:

Unsupported operand types for |: 'str' and 'str'
4

4 回答 4

10

使用元组和not in

if extout not in  (".csv", ".xml"):

True如果extout不匹配任何元组项否则将返回False

|是 python 中的按位或运算符,这就是为什么它不适用于字符串。

于 2013-07-09T14:29:28.660 回答
4

做你想做的最简单的方法是:

if extout not in ('.csv', '.xml'):
    ...
于 2013-07-09T14:29:46.977 回答
0

你也可以使用

if extout != ".csv" and extout != ".xml":

可以缩短为

if '.csv' != extout != '.xml':

或者,当然:

if not (extout == '.csv' or extout == '.xml'):

或使用正则表达式,然后您可以使用您喜欢的|符号:

if re.match(r'\.(csv|xml)$', extout):
于 2013-07-09T14:49:09.270 回答
-1

要测试某物是否不是两个值中的任何一个,请使用in,如下所示:

if extout not in (".csv", ".xml"):
   # Do Something.

额外说明

|是按位或。它不能应用于字符串。您正在寻找 boolean or

>>> 'abc' | 'def'

Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    'abc' | 'def'
TypeError: unsupported operand type(s) for |: 'str' and 'str'

>>> 'abc' or 'def'
'abc'

由于or短路,返回“abc”。

于 2013-07-09T14:28:55.427 回答