跟着ChatGPT学PsychoPy编程2:程序闪退的几点原因(目前遇到的)

1. 我设计了一个二元决策任务,选左按F键,选右按J键。键盘按键是用组件添加的,按键与内容的对应是用代码设置的。但是一开始没有考虑不按键的情况。我希望被试在规定时间(10s)内没有按键,实验会进入下一个试次。然而,在没有更改代码前,如果被试在10秒内没有按键,程序就闪退了!因此我询问了GPT解决办法,代码如下:

if key_resp.keys is not None and len(key_resp.keys) > 0:

# ps. key_resp是我的键盘组件名。这句意思是如果按键非空。这一句与最后的else,就是不闪退的精髓。

    if key_resp.keys[0] == 'f':

        position = (-0.3, 0)

    elif key_resp.keys[0] == 'j':

        position = (0.3, 0)

else:

  continue # 自动进入下一个循环


2. 这一类闪退很常见。引用的变量名出错或在文件中输错了内容,例如应该是xx.xlsx而误写成xx.xlsx.xlsx。或者写错了代码。。为避免或减少这些问题,一定要仔细检查每一步。当然如果程序闪退,看一下报错!!报错显示的error前后的内容很可能就是出问题的地方。

报错示例1:

dur = random.uniform(0.8, 1.2) AttributeError: 'builtin_function_or_method' object has no attribute 'uniform'

事实上,这个部分我是希望让十字注视点的呈现时间是在0.8~1.2直接浮动的,这个在组件中没办法直接设置,因此需要借助代码。使用GPT没有得到想要的结果(测试没成功),于是百度,找到了答案,链接如下:

https://www.zhihu.com/question/426892075

# 也就是添加一个dur变量,再在文本组件(添加了'+'作为十字注视点)中的Stop-duration(s)属性中写入$dur

dur = randint(800, 1400)/1000

使用作者给出的原代码是没有任何问题的,但我尝试改变一下,改成

dur = randint(0.8, 1.2)

于是就出现了一开始呈现的报错内容!

询问GPT得到了答案:

-randint(a, b)函数是用于生成指定范围内的随机整数,包括a和b。这里的参数a和b都应该是整数。

-当您使用 randint(800, 1200)/1000 表达式时,先生成一个整数随机数,然后将其除以1000得到一个浮点数。这是因为除法操作会将整数隐式转换为浮点数。

-而当您使用 (0.8, 1.2) 这样的具体值时,它不符合 randint() 函数的参数要求,因为参数应该是整数,而不是浮点数。因此,直接使用 (0.8, 1.2) 会导致错误。


报错示例2:

ZeroDivisionError: float division by zero 

GPT:

-ZeroDivisionError: float division by zero:这个错误意味着在程序中进行了一个浮点数除以零的除法操作,导致了除以零的错误。这通常发生在某个地方的除法表达式中,其中除数为零。
-要解决这个问题,你可以检查程序中的除法操作,并确保除数不为零。如果需要进行除以零的操作,你可以添加适当的条件判断来避免除以零的情况发生。

这个内容非常重要。因为我的代码中确实涉及到除法。一开始我定义除数为0,之后再对其进行赋值。这个报错直接提示我的赋值其实是不成功的,于是我去检查赋值部分的内容。


未来可能继续补充。7.8晚22点记。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值