TypeError: console() takes from 1 to 3 positional arguments but 4 were given

Python
本ページはプロモーションが含まれています

はじめに

robotframeworkからpythonを呼び出そうとした時にエラーが発生しました。
pythonは自作の関数で、ログをrobotframeworkに出力しようとした時に失敗したからでした。
今回はその時のエラーの原因と対処方法についてです。

エラー

ソースはソケットを使う簡単なテストのソースコードでです。
robotframeworkからpythonのsocketライブラリを呼び出して使うようにしていたのですが、出力結果をrobotframework上のコンソールに出したくてloggerを使っていた時に発生。

ソースコードは次のようなものです(簡略化しています)
こちらはrobotframeworkのコード。

# call_socket.robot

*** Settings ***
Library socket_test.py

*** Variables ***
${IP_ADD} 127\.0\.0\.1

*** Keywords ***


*** Test Cases ***
Test
    ${return_wd}= py_socket ${IP_ADD} 4000
    Log To Console ${\n}${return_wd}

こちらがpythonのコードです。

import socket
from robot.api import logger

def py_socket(ip_addr, port_num):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    param = (ip_addr, int(port_num))
    s.connect(param)

    print(ip_addr, 'Port:', str(port_num), 'へ接続中')
    logger.console(ip_addr, 'Port:', str(port_num), 'へ接続中')

    s.send(b'test')
    result = int(s.recv(256).decode().rstrip('\n'))

    return result

エラーメッセージは

TypeError: console() takes from 1 to 3 positional arguments but 4 were given

というものです。

エラーを訳すと
「型によるエラー:console()は1〜3つの引数を取りますが実際4つ渡されています」
とあります。

原因

原因はpythonのコード10行目の
logger.console(ip_addr, ‘Port:’, str(port_num), ‘へ接続中’)
の部分です。

pythonのprint()の場合、9行目のようにカンマ区切りで文字列をつなげることが可能です。
(print()は「+」で連結も可能)

ですが、loggerの場合は文字の連結はカンマ区切りでは利用できません。
loggerで文字列を結合する場合「+」で連結する必要があります。

次が修正したソースコードです。

import socket
from robot.api import logger

def py_socket(ip_addr, port_num):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    param = (ip_addr, int(port_num))
    s.connect(param)
    print(ip_addr, 'Port:', str(port_num), 'へ接続中')
    logger.console(str(ip_addr)+ "Port:" + str(port_num) + "へ接続中")

    s.send(b'test')
    result = int(s.recv(256).decode().rstrip('\n'))

    return hantei

intの箇所はstr()でキャストして文字列に変換しています。

さいごに

今回はrobotframeworkとpythonを利用した際にログ表示部分のミスによるエラーでした。
pythonの外部ライブラリを呼び出して使えるのがrobotframeworkの良い点です。
外部結果をrobotframeworkに表示したい事も多く、loggerは頻繁に利用すると思います。

robotframeworkの文法はかなりpythonライクじゃないのでpythonの書き方をするとこの様にエラーになることもよくありますので注意が必要ですね。

この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました