具有如果不是。。as语句一行python
所以我遇到了一个问题。。我试图打开一个文本文件,并根据变量的值逐行正常或反向读取它。Python不断抛出一个具有如果不是。。as语句一行python,python,Python,所以我遇到了一个问题。。我试图打开一个文本文件,并根据变量的值逐行正常或反向读取它。Python不断抛出一个AttributeError:\uuuu enter\uuu错误;但我只是想看看这是否可能 示例代码: def function(rev): # - open file in reverse format - open file normally with reversed(list(open("test.txt")))
AttributeError:\uuuu enter\uuu
错误;但我只是想看看这是否可能
示例代码:
def function(rev):
# - open file in reverse format - open file normally
with reversed(list(open("test.txt"))) if rev == True else open("test.txt") as dict:
for line in dict:
print (line)
pass
pass
pass
function(True)
结果:
...
with reversed(list(open("test.txt"))) if rev == True else open("test.txt") as dict:
AttributeError: __enter__
我如何做到这一点而不必为这两种可能性创建一个标准的if语句&为同一过程创建两个不同的as循环?Python中的上下文管理器正在进行一些疯狂的业务。尝试使用一个简单的for语句,而使用常规的for循环 read_option.py 如果您确实想要一个带有语句的
,您可能需要在自己的类中实现\uuuuu\uuuuu
方法。有关更多详细信息,请参阅此答案:
示例test.txt
输出
Python中的上下文管理器正在进行一些疯狂的业务。尝试使用一个简单的for语句,而使用常规的for循环
read_option.py
如果您确实想要一个带有
语句的,您可能需要在自己的类中实现\uuuuu\uuuuu
方法。有关更多详细信息,请参阅此答案:
示例test.txt
输出
不要在with
语句中这样做,表达式将生成两个不同的对象(列表或文件对象,列表没有上下文管理器接口,文件对象有,这就是产生错误的原因)
只需分成两行,首先打开:
def function(rev):
with open("test.txt") as fp:
data = reversed(list(fp)) if rev == True else fp:
for line in data:
print(line)
function(True)
不要在with
语句中这样做,表达式将生成两个不同的对象(列表或文件对象,列表没有上下文管理器接口,文件对象有,这就是产生错误的原因)
只需分成两行,首先打开:
def function(rev):
with open("test.txt") as fp:
data = reversed(list(fp)) if rev == True else fp:
for line in data:
print(line)
function(True)
列表没有上下文管理器接口,不能在带有
块的中使用。同样在Python中,可读性比写一行程序更重要。我不明白你想做什么。为什么要在没有标准if语句的情况下执行此操作?如果你只说如果rev==True
,然后反过来读,那就更干净了。否则,不要。与此答案类似,但有一个if语句:因为有很多代码使用行
变量,不管它的顺序如何。只需在脚本中复制/粘贴和创建更多行即可。列表没有上下文管理器界面,不能在带有
的块中使用。同样在Python中,可读性比写一行程序更重要。我不明白你想做什么。为什么要在没有标准if语句的情况下执行此操作?如果你只说如果rev==True
,然后反过来读,那就更干净了。否则,不要。与此答案类似,但有一个if语句:因为有很多代码使用行
变量,不管它的顺序如何。只需在脚本中复制/粘贴和创建更多行即可。这是第一个答案的一个很好的替代方案,而不是在一行中包含多行内容,而不是包含我需要的内容。谢谢:)这是第一个答案的一个很好的替代方案,它不是包含我需要的多行内容,而是在一行中完成。谢谢:)
(py36) [~]$ python3 read_option.py
ijlk
efgh
abcd
def function(rev):
with open("test.txt") as fp:
data = reversed(list(fp)) if rev == True else fp:
for line in data:
print(line)
function(True)