-1

ある関数で定義された変数を別の関数で使用しようとしています。使用する必要があることはわかっていますGlobal varが、期待していた出力がまだ得られていません。

def proxycall():
    global ip
    global port
    ip = "192.168.0.1"
    port = "8080"


def web1():
    class YWebPage():
        def something():
            var = 1
        def somethingelse():
            varr = 2
    class Browser():
        def someting():
            varrr = 3
        def sometingelse():
            varrrr = 4

    print (ip)
    print (port)

web1()

私のプログラムのこの最小バージョンは、トレースバックを提供しています - NameError: global name 'ip' is not defined.


最小バージョンに問題があることがわかりました。ご指摘ありがとうございます。ただし、以下のフルバージョンを呼び出すので、今はそれが私の問題ではないと思いますproxycall()。何かアイデアはありますか?

import sys
from PyQt4 import QtCore, QtGui, QtWebKit
from PyQt4.QtWebKit import QWebSettings
from PyQt4.QtNetwork import QNetworkAccessManager
from PyQt4.QtNetwork import *
import re
import requests

UA_STRING = """Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36""" # String for User-Agent
#vidurl = "http://www.youtube.com/watch?v=hqDT6G5_1tQ" # 94 views
vidurl = "http://httpbin.org"


def proxycall():
            global ip
            global port
                # Proxy Stuff
            count = 0
            while (count < 5):

                 #Call mashape proxy API and setup
              try:
                 headers = {'X-Mashape-Authorization':'xxxxxxxxxxxxx'}
                 p = requests.get('https://webknox-proxies.p.mashape.com/proxies/new?maxResponseTime=5', headers=headers, timeout=5.000)
                 prox = p.text
                 ip = prox.split(":")[1]   #split response string
                 port = prox.split(":")[2]
                 ip = re.sub('["}]', '', ip)   #sanitize output
                 port = re.sub('["}]', '', port)
                 proxy = str(ip) + ':' + str(port) #reformat proxy for Requests
                 print ('Retrieved proxy ' + str(proxy))
                 proxies = {"http": proxy}
                 print ('Configured proxy')
              except:
                 print('Mashape API error, FAIL')

                 #Get real IP address
              try:
                 r = requests.get('http://httpbin.org/ip', timeout=5.000)
                 s = r.text
                 realip = re.findall( r'[0-9]+(?:\.[0-9]+){3}', s )
                 print ('Real IP address is ' + str(realip))
              except:
                 print ("Connection Error (IP), FAIL")

                 #Test proxy
              try:
                 x = requests.get('http://bot.whatismyipaddress.com/', proxies=proxies, timeout=5.000)
                 y = x.text
                 proxyip = re.findall( r'[0-9]+(?:\.[0-9]+){3}', y )
                 print ('Masked IP address is ' + str(proxyip))
                 if proxyip != realip:
                    print ('Proxy test OK')
                    count = 100
                 else:
                    print ('Proxy test FAIL, GET new proxy...')  
              except:
                 print ("Connection Error (Proxy), FAIL")

def web1(parent):

    class YWebPage(QtWebKit.QWebPage):
        def __init__(self):
            super(QtWebKit.QWebPage, self).__init__()

        def userAgentForUrl(self, url):
            return UA_STRING


    class Browser(QtGui.QMainWindow): # "Browser" window


        def __init__(self, parent):
            QtGui.QMainWindow.__init__(self, parent)
            self.resize(800,600) # Viewport size
            self.centralwidget = QtGui.QWidget(self)
            self.html = QtWebKit.QWebView()


        def browse(self):
            self.webView = QtWebKit.QWebView()
            self.yPage = YWebPage()
            self.webView.setPage(self.yPage)
            self.webView.load(QtCore.QUrl(vidurl)) # Video URL
            self.webView.settings().setAttribute(QtWebKit.QWebSettings.PluginsEnabled,True) # Enables flash player
            self.webView.settings().setAttribute(QtWebKit.QWebSettings.AutoLoadImages, False) # No images for speed
            QWebSettings.clearMemoryCaches ()
            self.webView.show()
            proxycall()


    x = Browser(parent)
    QNetworkProxy.setApplicationProxy(QNetworkProxy(QNetworkProxy.HttpProxy, ip, port))
    x.browse()
4

5 に答える 5

3

まったく呼び出さなかったproxycall()ので、変数は設定されませんでした。

最初に呼び出してから、次のように呼び出しますweb1()

proxycall()
web1()

global名前は、関数としてマークしたからといって、単に存在するわけではありません。Python 名を具体化するには、代入 (バインディング) が必要です。

于 2013-08-06T13:51:42.057 に答える
1

ipグローバルにアクセスする前に、proxycall() を呼び出す必要があります。

proxycall()
web1()
于 2013-08-06T13:51:38.213 に答える
0

ipそれらを使用する前に、およびを初期化/定義する必要がありportます。電話proxycall()してからweb1()

 def proxycall():
        global ip
        global port
        ip = "192.168.0.1"
        port = "8080"


    def web1():
        class YWebPage():
            def something():
                var = 1
            def somethingelse():
                varr = 2
        class Browser():
            def someting():
                varrr = 3
            def sometingelse():
                varrrr = 4

        print (ip)
        print (port)

    proxycall()
    web1()

答え: 192.168.0.1 8080

于 2013-08-06T13:55:12.883 に答える
0

更新されたコードには、元のコードと同じ問題があります。このステートメントでは ip を使用しています。

QNetworkProxy.setApplicationProxy(QNetworkProxy(QNetworkProxy.HttpProxy, ip, port))

...しかし、その後のステートメントで呼び出すproxycallまで呼び出しません。x.browse()

于 2013-08-06T14:49:10.447 に答える
0

proxycall()初期化するために呼び出す必要がありますip

proxycall()
web1()
于 2013-08-06T13:52:02.957 に答える