Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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中,为什么我的错误排在第一位,打印语句排在第二位?_Python_Output - Fatal编程技术网

在python中,为什么我的错误排在第一位,打印语句排在第二位?

在python中,为什么我的错误排在第一位,打印语句排在第二位?,python,output,Python,Output,我写了一些类,包括购物车、客户、订单和一些订单折扣函数。这是我代码的最后一行 anu = Customer('anu', 4500) # 1 user_cart = [Lineitem('apple', 7, 7), Lineitem('orange', 5, 6)] # 2 order1 = Order(anu, user_cart) # 2 print(type(joe)) # 4 print(order1) # 5 format() # 6 伙计们,我知道格式会因为没有传递任

我写了一些类,包括购物车、客户、订单和一些订单折扣函数。这是我代码的最后一行

anu = Customer('anu', 4500)  # 1
user_cart = [Lineitem('apple', 7, 7), Lineitem('orange', 5, 6)]  # 2
order1 = Order(anu, user_cart)  # 2
print(type(joe))  # 4
print(order1) # 5

format()  # 6
伙计们,我知道格式会因为没有传递任何参数而抛出一个错误。我想问你们为什么错误首先出现,如果它首先出现,那么其余的代码如何执行良好。我认为python解释器一直在执行代码,当它发现一个bug时,它会删除所有输出并抛出该错误。 这是我的输出

Traceback (most recent call last):
  File "C:\Users\User\PyCharm Community Edition with Anaconda plugin 2019.3.1\plugins\python-ce\helpers\pydev\pydevd.py", line 1434, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Users\User\PyCharm Community Edition with Anaconda plugin 2019.3.1\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "D:/programming/python/progs/my_programs/abc_module/abstract_classes.py", line 97, in <module>
    format()
TypeError: format expected at least 1 argument, got 0
<class '__main__.Customer'>

Congratulations! your order was successfully processed.

Customer name: anu
Fidelity points: 4500 points

Order  :-
    product count: 2
        product        : apple
        amount         : 7 apple(s)
        price per unit : 7$ per 1 apple
        total price    : 49$


        product        : orange
        amount         : 5 orange(s)
        price per unit : 6$ per 1 orange
        total price    : 30$


subtotal        : 79$
promotion       : Fidelity Deal
discount amount : 24.88$
total           : 54.115$
回溯(最近一次呼叫最后一次):
文件“C:\Users\User\PyCharm社区版with Anaconda plugin 2019.3.1\plugins\python ce\helpers\pydev\pydevd.py”,第1434行,在_exec
pydev_imports.execfile(文件、全局、局部)#执行脚本
文件“C:\Users\User\PyCharm社区版,带Anaconda插件2019.3.1\plugins\python ce\helpers\pydev\\u pydev\u imps\\u pydev\u execfile.py”,execfile中第18行
exec(编译(内容+“\n”,文件,'exec'),全局,loc)
文件“D:/programming/python/progs/my_programs/abc_module/abstract_classes.py”,第97行,在
格式()
TypeError:格式至少需要1个参数,得到0
祝贺您的订单已成功处理。
客户名称:anu
保真度积分:4500分
订单:-
产品数量:2
产品:苹果
数量:7个苹果
单价:每1个苹果7美元
总价:49$
产品:橙
数量:5个橙色(s)
每单位价格:每1个橙子6美元
总价:30$
小计:79$
促销:富达交易
折扣额:24.88$
总数:54.115$

如果我猜对了,您的主要问题是为什么部分代码似乎在检测到错误之前运行?那是因为Python是一种解释语言

除了加载文件时检测到的纯语法错误外,所有错误都是在Python解释器执行语句时检测到的

这意味着程序将一直运行,直到出现实际错误为止,因此执行初始化和打印的代码将一直运行,因为其中没有错误。然后Python解释器将检测到
format
没有任何参数的错误,并报告该错误


至于为什么先打印错误,然后再打印程序输出,这是因为错误和正常输出被写入不同的“文件”。错误写入“标准错误”(
stderr
),正常输出写入“标准输出”(
stdout


IDE将输出捕获到
stderr
stdout
到不同的内部缓冲区,并且似乎只是在将输出写入
stdout
之前将输出写入
stdout

这种行为的发生是因为出于性能原因,stdout被缓冲,而stderr未被缓冲。这意味着在stdout(
print
指令)上写入某些内容时可能会有延迟,但在stderr上写入错误时则不会有延迟,从而导致stdout写入在stderr之后发生

有关更多详细信息,请参阅

如果不希望发生这种情况,请使用:

python -u myscript.py
调用脚本时。这具有禁用标准输出缓冲的效果


编辑:我看到您在pycharm解释器上运行,在这种情况下,您可以通过在
运行配置
解释器选项
字段中添加
-u
参数来为python解释器使用
-u
参数。

您显示的不是一个参数。输出不是来自您显示的代码,而是来自其他地方。例如,以
祝贺
开头的行,您在哪里打印它?输出确实来自我刚才显示的代码,因为
顺序
类repr magic方法生成此输出。所以当我打印order类的对象时,我可以说它产生了这个输出。所以,无论如何,我将减少大约15行输出,你们如何运行你们的程序?从IDE内部?在控制台上?@Someprogrammerdude我在Pycharm-python调试器上运行了这个